zoukankan      html  css  js  c++  java
  • 自己定义CNN网络模型并使用caffe训练

    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


  • 相关阅读:
    HTTP断点续传 规格严格
    Java Shutdown 规格严格
    linux 命令源码 规格严格
    JTable调整列宽 规格严格
    linux 多CPU 规格严格
    Hello can not find git path 规格严格
    Kill 规格严格
    拜拜牛人 规格严格
    Swing 规格严格
    Debugging hangs in JVM (on AIX but methodology applicable to other platforms) 规格严格
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411843.html
Copyright © 2011-2022 走看看