1.获取数据
使用cifar100数据集,然后进行归一化
class CNNMinst(object):
def __init__(self):
# 获取训练测试数据
(self.x_train, self.y_train), (self.x_test, self.y_test) = cifar100.load_data()
# 进行数据归一化
self.x_train = self.x_train / 255.0
self.x_test = self.x_test / 255.0
2.构建网络
构建两层卷积层加两层全连接层
- 第一层为32个55卷积核,步长为1,padding为same(前后图像大小一致,池化层中这个参数没有作用)。池化层卷积核大小为22,步长为2
- 第二层卷积核为64个,其他一样
- 第一层全连接层为1024个神经元,使用relu作为激活函数
- 因为要做100个分类,所以最后一层为100个神经元
model = keras.models.Sequential([
#卷积层1:32个5*5*3 的filter,strides=1,padding=“same”
keras.layers.Conv2D(32,kernel_size=5,strides=1,
padding='same',data_format="channels_last",activation=tf.nn.relu),
#池化层1:2*5的窗口,strides=2
keras.layers.MaxPool2D(pool_size=2,strides=2,padding='same'),
#卷积层2:64个5*5*32的filter,strides=1,padding=‘same’
keras.layers.Conv2D(64,kernel_size=5,strides=1,padding='same'),
# 池化层2:2*5的窗口,strides=2 [None,8,8,64]
keras.layers.MaxPool2D(pool_size=2, strides=2, padding='same'),
# [None,8,8,64] --> [None,8*8*64]
keras.layers.Flatten(),
#全连接层神经网络
# 1024个神经元网络层
keras.layers.Dense(1024,activation=tf.nn.relu),
# 100个神经元网络
keras.layers.Dense(100,activation=tf.nn.softmax)
])
3.编译
设置优化器,损失计算和指标
def compile(self):
CNNMinst.model.compile(optimizer=tf.keras.optimizers.Adam(),
loss=keras.losses.sparse_categorical_crossentropy,
metrics=['accuracy'])
return None
4.训练
设置训练数据,迭代次数和每批数据量大小
def fit(self):
CNNMinst.model.fit(self.x_train,self.y_train,epochs=1,batch_size=32)
return None