caffe在 .\examples\mnist文件夹下有一个 lenet.prototxt文件,这个文件定义了一个广义的LetNet-5模型,对这个模型文件逐段分解一下。

name: "LeNet"   //网络的名称是LeNet
layer { //定义一个网络层
name: "data" //定义该网络层的名称为 data
type: "Input" //定义网络层的类型是 输入层
top: "data" //定义网络层的输出名称为data
//定义该网络层的训练参数
input_param { //如果同时读取过多张图片进行训练,训练耗时比较久
//所以CNN中分组读入训练图片
//shape中第一个参数定义每组中包含图片数量
//第二个参数定义组数
//第三和第四个参数定义图片大小 //定义读取数据维度是: 64 1 28 28
shape: { dim: 64 dim: 1 dim: 28 dim: 28 }
}
} //第一卷积层定义
layer { //定义一个网络层
name: "conv1" //网络层的名称是conv1
type: "Convolution" //网络层的类型是 卷积层 //模型结构图有两种常用画法,一种是从左到右,一种是从下到上
//caffe中使用从下到上画法,所以“bottom”表示的是上一层(输入层) bottom: "data" //网络层的输入层是 data层 //同理,输出层在上,“top”表示输出 top: "conv1" //该层的输出层名称为conv1 //param定义权重和偏置的学习率,学习率大,迭代速度快,但是容易找不到最优解
//学习率小,迭代速度慢,耗时久
//如果有两个lr_mult参数,第一个表示权重(卷积核)的学习率系数,第二个表示偏置的学习率系数
//lr_mult定义的只是学习率系数,最终的值需要乘以solver.prototxt配置文件中配置的base_lr的值
//一般偏置的学习率系数是权重学习率系数的2倍 param {
lr_mult: 1 //该层权重学习率的系数为1
}
param {
lr_mult: 2 //该层偏置学习率的系数为2
}
//卷积操作的参数设置
convolution_param {
num_output: 20 //卷积输出特征图的数量为20
kernel_size: 5 //卷积核的大小是5*5
stride: 1 //卷积操作的步长是1,即卷积核逐个移动
weight_filler {
type: "xavier" //卷积核参数采用xavier方法初始化
}
bias_filler {
type: "constant" //偏置初始值为0
}
}
} //卷积完成之后,数据的维度变成 64 20 24 24 //第一池化层定义
layer {
name: "pool1" //网络层的名称是pool1
type: "Pooling" //网络层的类型是池化层
bottom: "conv1" //网络层的输入时conv1(第一卷积层)
top: "pool1" //网络层的输出名称是 pool1 //池化操作的参数设置
pooling_param {
pool: MAX //最大值池化
kernel_size: 2 //池化核尺寸 是2*2
stride: 2 //池化步长是2
}
} //第一池化完成之后,数据的维度变成 64 20 12 12 //第二卷积层定义
layer {
name: "conv2" //网络层的名称是conv2
type: "Convolution" //网络层的类型是卷积层
bottom: "pool1" //网络层的输入时 pool1(第一池化层)
top: "conv2" //网络层的输出名称是 conv2
param {
lr_mult: 1 //卷积核的学习率系数是1
}
param {
lr_mult: 2 //偏置的学习率系数是2
} //第二卷积层参数设置
convolution_param {
num_output: 50 //输出特征图的数量
kernel_size: 5 //卷积核的尺寸是5*5
stride: 1 //卷积操作步长是1
weight_filler {
type: "xavier" //卷积核参数采用xavier方法初始化
}
bias_filler {
type: "constant" //偏置初始值为0
}
}
} //第二卷积操作完成之后,数据维度是 64 50 8 8 //第二池化层
layer {
name: "pool2" //网络层的名称是 pool2
type: "Pooling" //网络层的类型是池化层
bottom: "conv2" //网络层的输入时 conv2(第二卷积层)
top: "pool2" //网络层的输出名称是 pool2
pooling_param {
pool: MAX //池化方式是最大值池化
kernel_size: 2 //池化核大小是2*2
stride: 2 //池化步长是2
}
} //第二池化层完成之后,数据维度是 64 50 4 4 //第一层全连接层定义
layer {
name: "ip1" //网络层的名称是ip1
type: "InnerProduct" //网络层的类型是 全连接层
bottom: "pool2" //网络层的输入时 pool2(第二池化层)
top: "ip1" //网络层的输出名称是ip1
param {
lr_mult: 1 //卷积核的学习率系数是1
}
param {
lr_mult: 2 //偏置的学习率系数是2
} //第一全连接层参数设置
inner_product_param {
num_output: 500 //输出向量维度,500个输出神经元
weight_filler {
type: "xavier" //卷积核参数采用xavier方法初始化
}
bias_filler {
type: "constant" //偏置初始值为0
}
}
} //第一全连接层完成之后数据的维度是 1 500 1 1 //激活函数层的定义
layer {
name: "relu1" //网络层的名称是relu1
type: "ReLU" //网络层的类型是ReLU激活函数
bottom: "ip1" //网络层的输入时ip1(第一全连接层)
top: "ip1" //网络层的输出名称是 ip1,跟输入名称一样
} //激活层完成之后,数据的维度是 1 500 1 1 //第二全连接层定义
//数据的分类判断在本层完成
layer {
name: "ip2" //网络层的名称是 ip2
type: "InnerProduct" //网络层的类型是全连接层
bottom: "ip1" //网络层的输入时 ip1(激活函数层)
top: "ip2" //网络层的输出名称是 ip2
param {
lr_mult: 1 //卷积核的学习率系数是1
}
param {
lr_mult: 2 //偏置的学习率系数是2
} //第二全连接层参数设置
inner_product_param {
num_output: 10 //输出维度是10,分别是0~9的数字
weight_filler {
type: "xavier" //卷积核参数采用xavier方法初始化
}
bias_filler {
type: "constant" //偏置初始值为0
}
}
} //第二全连接层完成之后,数据的维度是 1 10 1 1 //输出层定义
layer {
name: "prob" //网络的名称是 prob
type: "Softmax" //网络的类型是损失函数
bottom: "ip2" //网络的输入是 ip2(第二全连接层)
top: "prob" //网络的输出名称是 prob
}

lenet.prototxt模型可视化,可以作为对比:

caffe中LetNet-5卷积神经网络模型文件lenet.prototxt理解的更多相关文章

  1. 使用PyTorch简单实现卷积神经网络模型

    这里我们会用 Python 实现三个简单的卷积神经网络模型:LeNet .AlexNet .VGGNet,首先我们需要了解三大基础数据集:MNIST 数据集.Cifar 数据集和 ImageNet 数 ...

  2. CNN-1: LeNet-5 卷积神经网络模型

    1.LeNet-5模型简介 LeNet-5 模型是 Yann LeCun 教授于 1998 年在论文 Gradient-based learning applied to document      ...

  3. 手写数字识别 ----卷积神经网络模型官方案例注释(基于Tensorflow,Python)

    # 手写数字识别 ----卷积神经网络模型 import os import tensorflow as tf #部分注释来源于 # http://www.cnblogs.com/rgvb178/p/ ...

  4. 利用Tensorflow实现卷积神经网络模型

    首先看一下卷积神经网络模型,如下图: 卷积神经网络(CNN)由输入层.卷积层.激活函数.池化层.全连接层组成,即INPUT-CONV-RELU-POOL-FC池化层:为了减少运算量和数据维度而设置的一 ...

  5. 【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型

    初学tensorflow,参考了以下几篇博客: soft模型 tensorflow构建全连接神经网络 tensorflow构建卷积神经网络 tensorflow构建卷积神经网络 tensorflow构 ...

  6. CNN-4: GoogLeNet 卷积神经网络模型

    1.GoogLeNet 模型简介 GoogLeNet 是2014年Christian Szegedy提出的一种全新的深度学习结构,该模型获得了ImageNet挑战赛的冠军. 2.GoogLeNet 模 ...

  7. CNN-2: AlexNet 卷积神经网络模型

    1.AlexNet 模型简介 由于受到计算机性能的影响,虽然LeNet在图像分类中取得了较好的成绩,但是并没有引起很多的关注. 知道2012年,Alex等人提出的AlexNet网络在ImageNet大 ...

  8. CNN-3: VGGNet 卷积神经网络模型

    1.VGGNet 模型简介 VGG Net由牛津大学的视觉几何组(Visual Geometry Group)和 Google DeepMind公司的研究员一起研发的的深度卷积神经网络,在 ILSVR ...

  9. 吴裕雄--天生自然python Google深度学习框架:经典卷积神经网络模型

    import tensorflow as tf INPUT_NODE = 784 OUTPUT_NODE = 10 IMAGE_SIZE = 28 NUM_CHANNELS = 1 NUM_LABEL ...

随机推荐

  1. CaffeNet用于Flickr Style数据集上的风格识别

    转自 http://blog.csdn.net/liumaolincycle/article/details/48501423 微调是基于已经学习好的模型的,通过修改结构,从已学习好的模型权重中继续训 ...

  2. Spark SQL 编程API入门系列之SparkSQL数据源

    不多说,直接上干货! SparkSQL数据源:从各种数据源创建DataFrame 因为 spark sql,dataframe,datasets 都是共用 spark sql 这个库的,三者共享同样的 ...

  3. marge into操作

    动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录 ...

  4. 用VS2015创建ASP.NET Web Forms 应用程序

    在 Visual Studio 2015 中,按着以下步骤创建一个 Web Forms 应用程序项目: 1.起始页/文件--->新建项目--->已安装--->模板--->Vis ...

  5. java 遍历list 模糊查询用

    java 遍历list 模糊查询用 /** * 筛选list * @param list 要筛选的list * @param key 筛选的key * @param <T> * @retu ...

  6. android webview一些注意事项(持续更新)

    1.loadUrl() 的参数必须“http://”开头: 2.如果用到内部类获取页面内容,此类不能混淆: 3.2中情况保持不混淆需要将webview所在的包都保持不混淆,常规的保持类不混淆不生效: ...

  7. reflect 反射结合集合泛型的总结

    集合泛型: 可以放任何对象的 ArrayList  ArrayList list = new ArrayList();  没有限定泛型类型. list.add("lilin");l ...

  8. Spring Boot 20170913

    SpringBoot 是做微服务的,比如只用来发邮件,只用来上载文件等等.优点是开发极其简单,约定大于俗成,缺点是不适合小型项目.通常用来分解大型项目,做成多个微服务. 参考: http://www. ...

  9. NodeJS踩坑实录

    nodejs的常用api url 主要是配置一系列和路径相关的信息 url.parse(urlString[, parseQueryString[, slashesDenoteHost]]) 将一个U ...

  10. elementUI 日期时间选择器el-date-picker开始时间与结束时间约束

    主要思路:el-date-picker组件需要 :picker-options属性,属性值为data,data的数据来自于methods中的方法. ##template代码 <el-form-i ...