caffe中LetNet-5卷积神经网络模型文件lenet.prototxt理解
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理解的更多相关文章
- 使用PyTorch简单实现卷积神经网络模型
这里我们会用 Python 实现三个简单的卷积神经网络模型:LeNet .AlexNet .VGGNet,首先我们需要了解三大基础数据集:MNIST 数据集.Cifar 数据集和 ImageNet 数 ...
- CNN-1: LeNet-5 卷积神经网络模型
1.LeNet-5模型简介 LeNet-5 模型是 Yann LeCun 教授于 1998 年在论文 Gradient-based learning applied to document ...
- 手写数字识别 ----卷积神经网络模型官方案例注释(基于Tensorflow,Python)
# 手写数字识别 ----卷积神经网络模型 import os import tensorflow as tf #部分注释来源于 # http://www.cnblogs.com/rgvb178/p/ ...
- 利用Tensorflow实现卷积神经网络模型
首先看一下卷积神经网络模型,如下图: 卷积神经网络(CNN)由输入层.卷积层.激活函数.池化层.全连接层组成,即INPUT-CONV-RELU-POOL-FC池化层:为了减少运算量和数据维度而设置的一 ...
- 【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型
初学tensorflow,参考了以下几篇博客: soft模型 tensorflow构建全连接神经网络 tensorflow构建卷积神经网络 tensorflow构建卷积神经网络 tensorflow构 ...
- CNN-4: GoogLeNet 卷积神经网络模型
1.GoogLeNet 模型简介 GoogLeNet 是2014年Christian Szegedy提出的一种全新的深度学习结构,该模型获得了ImageNet挑战赛的冠军. 2.GoogLeNet 模 ...
- CNN-2: AlexNet 卷积神经网络模型
1.AlexNet 模型简介 由于受到计算机性能的影响,虽然LeNet在图像分类中取得了较好的成绩,但是并没有引起很多的关注. 知道2012年,Alex等人提出的AlexNet网络在ImageNet大 ...
- CNN-3: VGGNet 卷积神经网络模型
1.VGGNet 模型简介 VGG Net由牛津大学的视觉几何组(Visual Geometry Group)和 Google DeepMind公司的研究员一起研发的的深度卷积神经网络,在 ILSVR ...
- 吴裕雄--天生自然python Google深度学习框架:经典卷积神经网络模型
import tensorflow as tf INPUT_NODE = 784 OUTPUT_NODE = 10 IMAGE_SIZE = 28 NUM_CHANNELS = 1 NUM_LABEL ...
随机推荐
- UESTC--1269--ZhangYu Speech(模拟)
ZhangYu Speech Time Limit: 1000MS Memory Limit: 65535KB 64bit IO Format: %lld & %llu Submit ...
- Bootstrap表格内容居中
1.<th style='text-align: center;'>host</th> 水平居中 2.<td rowspan=$row_host1 style='vert ...
- ES6 | ES6新语法 在编码实践中的应用
本章探讨如何将 ES6 的新语法,运用到编码实践之中,与传统的 JavaScript 语法结合在一起,写出合理的.易于阅读和维护的代码. 多家公司和组织已经公开了它们的风格规范,本文的内容主要参考了 ...
- SQL Server-简单查询语句,疑惑篇
前言 对于一些原理性文章园中已有大量的文章尤其是关于索引这一块,我也是花费大量时间去学习,对于了解索引原理对于后续理解查询计划和性能调优有很大的帮助,而我们只是一些内容进行概括和总结,这一节我们开 ...
- 一个关于传参数js数组的封装方法(寄生模式)
function createArr(){ var arr = new Array(); arr.push.apply(arr,arguments); arr.toJoin = function(){ ...
- 解决PL/SQL管理工具database下拉为空和登录出现ORA-12154
前言:昨天捣鼓了一下午,终于可以用plsql连接上oracle了... 测试环境:win10 注意问题: (一).环境变量 我发现按网上别人说的那一大推环境配置,很容易出错,我把它们全删了,就留了两个 ...
- jenkins 展示报告
1.下载插件 HTML Publisher plugin 2.设置说明 3.展示css 下载插件 (1).Startup Trigger: 可实现在Jenkins节点(master/slave)启动时 ...
- BZOJ 1396 识别子串 (后缀自动机+线段树)
题目大意: 给你一个字符串S,求关于每个位置x的识别串T的最短长度,T必须满足覆盖x,且T在S中仅出现一次 神题 以节点x为结尾的识别串,必须满足它在$parent$树的子树中只有一个$endpos$ ...
- CF449D Jzzhu and Numbers (状压DP+容斥)
题目大意: 给出一个长度为n的序列,构造出一个序列使得它们的位与和为0,求方案数 也就是从序列里面选出一个非空子集使这些数按位与起来为0. 看了好久才明白题解在干嘛,我们先要表示出两两组合位与和为0的 ...
- 三、frpc 完整配置文件
# [common] is integral section [common] # A literal address or host name for IPv6 must be enclosed # ...