1.导入所需模块
from keras.models import Sequential from keras.layers import Dense,Dropout,Flatten,Conv2D,MaxPool2D
2.建立Keras的sequential模型
建立一个Sequential线性堆叠模型,后续只需要使用model.add方法将各个神经网络层加入模型即可
model = Sequential()
3.建立卷积层1和池化层1
建立卷积层1
使用下列代码建立卷积层1,输入的数字图像大小为28×28,进行第一次卷积运算产生16个图像,卷积运算并不会改变图像大小,所以图像大小仍然是28×28
model.add(Conv2D(filters=16,kernel_size=(5,5),padding='same',input_shape=(28,28,1), activation='relu'))
filters滤镜数
kernel_size每一个滤镜大小
padding让卷积运算产生的图像大小不变
input_shape第一二维:代表输入的图像形状为28×28,第三维:因为单色灰度图像,所以最后的维数值是1
activation设置relu激活函数
建立池化层1
下面的程序代码建立池化层1,输入参数pool_size=(2,2),执行第一次缩减采样,将16个28×28的图像缩小为16个14×14的图像
model.add(MaxPool2D(pool_size=(2,2)))
4.建立卷积层2和池化层2
使用下面的程序建立卷积层2,执行第二次卷积运算:将原本的16个图像转换为36个图像,卷积运算不会改变图像大小
model.add(Conv2D(filters=36,kernel_size=(5,5),padding=’same’, activation=’relu’))
建立池化层2,并且加入Dropout避免过度拟合
model.add(MaxPool2D(pool_size=(2,2))) model.add(Dropout(0.25))
5.建立神经网络(平坦层,隐藏层,输出层)
(1)建立平坦层
以下程序代码建立平坦层,将之前的步骤已经建立的池化层2,共36个7×7图像转换为一维向量36x7x7=1764个float数,正好对应1764个神经元.
model.add(Flatten())
(2)建立隐藏层
并且把Dropout层加入模型中,Dropout(0.5)的功能是,每次训练迭代时,会随机的神经网络中放弃50%的神经元,以避免过度拟合
model.add(Dense(128,activation='relu')) model.add(Dropout(0.5))
建立输出层
最后输出层,共有10个神经元,对应0-9共10个数字,并且使用softmax激活函数进行转换,softmax可以将神经元转换为每一个数字的概率
6.显示模型的摘要
我们可以使用下列指令查看模型的摘要
print(model.summary())
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 28, 28, 16) 416
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 14, 14, 16) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 14, 14, 36) 14436
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 7, 7, 36) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 7, 7, 36) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 1764) 0
_________________________________________________________________
dense_1 (Dense) (None, 128) 225920
_________________________________________________________________
dropout_2 (Dropout) (None, 128) 0
_________________________________________________________________
dense_2 (Dense) (None, 10) 1290
=================================================================
Total params: 242,062
Trainable params: 242,062
Non-trainable params: 0
_________________________________________________________________
None