对于神经网络实现手写数字识别(MNIST)网络结构通过在线可视化工具查看和修改:

(http://ethereon.github.io/netscope/#/editor )

一、卷积层(Convolution)

输入为28*28的图像,经过5*5的卷积之后,得到一个(28-5+1)*(28-5+1) = 24*24的map。

每个map是不同卷积核在前一层每个map上进行卷积,并将每个对应位置上的值相加然后再加上一个偏置项。

二、池化层(Pooling)

输入为卷积层1的输出,大小为24*24,对每个不重叠的2*2的区域进行降采样。对于max-pooling,选出每个区域中的最大值作为输出。而对于mean-pooling,需计算每个区域的平均值作为输出。最终,该层输出一个(24/2)*(24/2)的map

三、激活层(ReLU)

激活函数是用来引入非线性因素的。当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate.

Type为该层类型,可取值分别为:

1、ReLU:表示我们使用relu激活函数,relu层支持in-place计算,这意味着该层的输入和输出共享一块内存,以避免内存的消耗。

2、Sigmoid:代表使用sigmoid函数;

3、TanH:代表使用tanh函数;

4、AbsVal:计算每个输入的绝对值f(x)=Abs(x)

5、Power对每个输入数据进行幂运算

f(x)= (shift + scale * x) ^ power

层类型:Power

可选参数:

  power: 默认为1

  scale: 默认为1

  shift: 默认为0

四、全连接层(InnerProduct)

50*4*4=800个输入结点和500个输出结点

五、softmax层

Softmax回归模型是logistic回归模型在多分类问题上的推广,在多分类问题中,待分类的类别数量大于2,且类别之间互斥。通常情况下softmax会被用在网络中的最后一层,用来进行最后的分类和归一化。

神经网络实现手写数字识别(MNIST)的 prototxt 文件源码:

name: "LeNet"
layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TRAIN}transform_param {scale: 0.00390625}data_param {source: "/home/gh/caffe/examples/mnist/mnist_train_lmdb"batch_size: 64backend: LMDB}
}
layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TEST}transform_param {scale: 0.00390625}data_param {source: "/home/gh/caffe/examples/mnist/mnist_test_lmdb"batch_size: 100backend: LMDB}
}
layer {name: "conv1"        #卷积层1type: "Convolution"bottom: "data"top: "conv1"param {lr_mult: 1         #学习率1,和权值更新相关}param {lr_mult: 2         #学习率2,和权值更新相关}convolution_param {num_output: 20     #20个输出的map kernel_size: 5     #卷积核大小为5*5stride: 1          #卷积步长为1weight_filler {    #权值初始化方式type: "xavier"   #默认为“constant",值全为0,很多时候我们也可以用"xavier"或者”gaussian"来进行初始化}bias_filler {      #偏置值的初始化方式type: "constant" #该参数的值和weight_filler类似,一般设置为"constant",值全为0}}
}
layer {name: "pool1"         #池化层1type: "Pooling"bottom: "conv1"top: "pool1"pooling_param {pool: MAX           #Pool为池化方式,默认值为MAX,可以选择的参数有MAX、AVE、STOCHASTICkernel_size: 2      #池化区域的大小,也可以用kernel_h和kernel_w分别设置长和宽stride: 2           #步长,即每次池化区域左右或上下移动的距离,一般和kernel_size相同,即为不重叠池化。也可以也可以小于kernel_size,即为重叠池化,Alexnet中就用到了重叠池化的方法}
}
layer {name: "conv2"type: "Convolution"bottom: "pool1"top: "conv2"param {lr_mult: 1}param {lr_mult: 2}convolution_param {num_output: 50kernel_size: 5stride: 1weight_filler {type: "xavier"}bias_filler {type: "constant"}}
}
layer {name: "pool2"type: "Pooling"bottom: "conv2"top: "pool2"pooling_param {pool: MAXkernel_size: 2stride: 2}
}
layer {name: "ip1"type: "InnerProduct"bottom: "pool2"top: "ip1"param {lr_mult: 1}param {lr_mult: 2}inner_product_param {num_output: 500weight_filler {type: "xavier"}bias_filler {type: "constant"}}
}
layer {name: "relu1"type: "ReLU"     #relu激活函数层支持in-place计算,这意味着该层的输入和输出共享一块内存,以避免内存的消耗。bottom: "ip1"top: "ip1"
}
layer {name: "ip2"type: "InnerProduct"bottom: "ip1"top: "ip2"param {lr_mult: 1}param {lr_mult: 2}inner_product_param {num_output: 10weight_filler {type: "xavier"}bias_filler {type: "constant"}}
}
layer {name: "accuracy"type: "Accuracy"bottom: "ip2"bottom: "label"top: "accuracy"include {phase: TEST}
}
layer {             #可以计算给出每个样本对应的损失函数值name: "loss"type: "SoftmaxWithLoss"bottom: "ip2"bottom: "label"top: "loss"
}

Caffe网络结构实现相关推荐

  1. Caffe 网络结构可视化

    2019独角兽企业重金招聘Python工程师标准>>> 可以利用python接口实现网络结构的可视化,便于直观理解. 最近安装了tensorflow,发现caffe的draw_net ...

  2. 使用Eric构建Caffe应用程序-Baby年龄识别

    训练好的Caffe网络结构,可以固定下来,直接载入程序作为数据库接口使用.本文使用Eric构建运行于Python环境下的图片识别应用程序,因为Eric使用QT作为GUI,且有Python的接口,可直接 ...

  3. 使用Eric构建使用Caffe应用程序

    训练好的Caffe网络结构,可以固定下来,直接载入程序作为数据库接口使用.本文使用Eric构建运行于Python环境下的图片识别应用程序. 1.编译好Pycaffe之后,安装Eric4.PyQt4. ...

  4. 深度学习caffe实战(一)验证码识别

    狭义上讲验证码识别是将验证码图像转化成字符串值,传统方法常常先对验证码图像进行字符分割,再对验证码进行识别,劣势在于字符分割方法往往针对不同风格的验证码需要做修改,某些验证码加入噪声或线条,字符位置不 ...

  5. 利用prototxt文件绘制网络的结构图

    本文转自:http://blog.csdn.net/u014568921/article/details/53947006 如何对prototxt文件绘制网络的结构图 caffe 使能python接口 ...

  6. 深度学习(二十六)Network In Network学习笔记-ICLR 2014

    Network In Network学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50458190 作者:hjimce 一.相关理论 本篇 ...

  7. 【技术综述】“看透”神经网络

    本文是深度神经网络可视化的一点东西 言有三 毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人 作者 | 言有三 编辑 | 言有三 大家最诟病深度学习的一点就是理论基础不够系统,模型就像一个黑 ...

  8. 人工智能学习体系大纲(src:http://blog.sina.com.cn/s/blog_7dbb766f0102xdwu.html)

    阶段一.数学基础 本课程主要从数据分析.概率论和线性代数及矩阵这三大块讲解基础,方便大家后续课程的学习中更好的理解机器学习和深度学习的相关算法内容. 一.数据分析 1)常数e 2)导数  3) 梯度 ...

  9. 深度学习(二十六)Network In Network学习笔记

    Network In Network学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50458190 作者:hjimce 一.相关理论 本篇 ...

最新文章

  1. JAVA 设计模式 模板方法模式
  2. 线程:方法join的使用
  3. 项目管理系列之项目范围时间及资源管理(二)
  4. 修改Element-UI的组件样式
  5. Vue文件的缩进改为4个空格
  6. React开发(140):react中ref为dom添加ref
  7. Spring Boot笔记-新增嵌入式tomcat配置(修改tomcat中conf/server.xml)
  8. AWS AI 全面助力视频理解,GluonCV 0.6 轻松复现前沿模型
  9. MyBatis源码之:MapperMethod
  10. WLAN中直接转发和隧道转发流程与封装
  11. IDEA配置插件,插件使编程更快速
  12. 电脑是个神奇的东西!
  13. 48. action 与 filter 的执行流程
  14. isbn书号查询php代码,php根据isbn书号查询amazon网站上的图书信息的示例
  15. OSChina 周一乱弹 —— 最萌碰瓷
  16. 10000电信固话如何设置呼叫转移
  17. POJ 1436 Horizontally Visible Segments(线段树区间修改)
  18. python代码编辑器
  19. PDF怎么删除空白页?必备PDF页面删除技巧
  20. 数部视频学习资源,一定有你想要的

热门文章

  1. [2016百度之星 - 初赛(Astar Round2A)]Snacks
  2. mysql 性能调优 参数随写
  3. Java EnumMap工作原理及实现
  4. Android 关于java.util.NoSuchElementException错误
  5. Cocos2d-x Tiled地图编辑器(一)基本使用
  6. 第一节 MongoDB介绍及下载与安装
  7. 分享:流言终结者——C语言内存管理
  8. 一机三屏台式计算机,三屏系统重现江湖:背后一台完整主机
  9. 公司内多个公众号实现账号互通(UnionID机制处理)
  10. python画cpk图_TensorFlow——Checkpoint为模型添加检查点的实例