自己定义CNN网络模型并使用caffe训练

caffe自带的例子中对mnist手写体数字训练使用的卷积神经网络是在lenet_train_test.prototxt中定义的,隐含层包含了2个卷积层,2个池化层,2个全连接层,1个激活函数层。网络结构如下:


自己定义CNN网络模型并使用caffe训练_第1张图片


自己定义CNN网络模型并使用caffe训练_第2张图片


这里尝试修改一下lenet_train_test.prototxt文件,减少或增加一组卷积层和池化层,对比一下各自的训练精度和损失。


1.  减少一组卷积层和池化层


这样隐含层就包含了1个卷积层,1个池化层,2个全连接层,1个激活函数层。修改的方式直接在lenet_train_test.prototxt文件中删除第二卷积层和第二池化层的定义,并把第一全连接层的输入改成第一池化层的输出就行了(同时把第一卷积层的输出由20改成了50)。

修改之后的网络结构:


自己定义CNN网络模型并使用caffe训练_第3张图片


自己定义CNN网络模型并使用caffe训练_第4张图片


训练结果:

自己定义CNN网络模型并使用caffe训练_第5张图片



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,修改之后的网络结果:




自己定义CNN网络模型并使用caffe训练_第6张图片


训练结果:

自己定义CNN网络模型并使用caffe训练_第7张图片


不做修改,正常情况下lenet_train_test.prototxt的训练结果为:

自己定义CNN网络模型并使用caffe训练_第8张图片


对比


减少一组卷积层和池化层的训练精度: 0.9881

减少一组卷积层和池化层的训练损失: 0.0359024


正常情况下的训练精度: 0.99

正常情况下的训练损失: 0.0295332


增加一组卷积层和池化层的训练精度: 0.992

增加一组卷积层和池化层的训练损失: 0.0257643


你可能感兴趣的:(深度学习)