接下来定义神经网络模型架构。
在实际的研发工作中,模型架构研究是主要工作。当你刚刚开始时,可以从学术论文中复制经过验证的架构,或者使用现有的示例,Keras中的示例网址。
首先声明一个Sequential模型格式:
model = Sequential()
接下来,声明输入层:
model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=input_shape))
input_shape参数应为1个样本的形状。在本例中,与每个数字图像的(深度、宽度、高度)对应的是相同的(1,28,28)。
前3个参数分别对应于要使用的卷积滤波器的数量、每个卷积核中的行数和列数。
注意: 步骤大小默认为(1,1),可以使用“subsample”参数进行调优。
我们可以通过打印当前模型输出的形状来确认:
print(model.output_shape)#(None, 32, 26, 26)
接下来,可以简单地在模型中添加更多层,就像搭积木一样:
model.add(Convolution2D(32, 3, 3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
这里,我们不会过多讨论理论,如需进一步了解,可参考卷积神经网络。
MaxPooling2D层是池化层,进一步降低数据量提取特征,Dropout层的作用是防止过拟合。
到目前为止,对于模型参数&