caffe自带的例子中对mnist手写体数字训练使用的卷积神经网络是在lenet_train_test.prototxt中定义的,隐含层包含了2个卷积层,2个池化层,2个全连接层,1个激活函数层。网络结构如下:
这里尝试修改一下lenet_train_test.prototxt文件,减少或增加一组卷积层和池化层,对比一下各自的训练精度和损失。
1. 减少一组卷积层和池化层
这样隐含层就包含了1个卷积层,1个池化层,2个全连接层,1个激活函数层。修改的方式直接在lenet_train_test.prototxt文件中删除第二卷积层和第二池化层的定义,并把第一全连接层的输入改成第一池化层的输出就行了(同时把第一卷积层的输出由20改成了50)。
修改之后的网络结构:
训练结果:
1. 增加一组卷积层和池化层
这样隐含层就包含了3个卷积层,3个池化层,2个全连接层,1个激活函数层。这里要注意的是图像大小是28*28,第一和第二卷积层的卷积核大小都是5*5,第一和第二池化层的池化核大小都是2*2,所以经过第二池化层之后单个图片的大小就只有 ((28-4)/2-4)/2=4,即4*4大小了,那新加的第三卷积层的卷积核就不能再是5*5了,这里改用3*3的卷积核,之后的第三池化核大小改成1*1,步长也改成1,修改之后的网络结果:
训练结果:
不做修改,正常情况下lenet_train_test.prototxt的训练结果为:
对比
减少一组卷积层和池化层的训练精度: 0.9881
减少一组卷积层和池化层的训练损失: 0.0359024
正常情况下的训练精度: 0.99
正常情况下的训练损失: 0.0295332
增加一组卷积层和池化层的训练精度: 0.992
增加一组卷积层和池化层的训练损失: 0.0257643