prototxt文件是caffe的配置文件,用于保存CNN的网络结构和配置信息。prototxt文件有三种,分别是deploy.prototxt,train_val.prototxt和solver.prototxt。

1. solver.prototxt

solver.prototxt是caffe的配置文件。里面定义了网络训练时候的各种参数,比如学习率、权重衰减、迭代次数等等。

solver.prototxt文件只在网络进行训练的时候需要载入。是网络训练的一个整体的参数配置文件。

下面详细说明每一个参数所代表的意义:

 #网络模型描述文件
#也可以用train_net和test_net来对训练模型和测试模型分别设定
#train_net: "xxxxxxxxxx"
#test_net: "xxxxxxxxxx"
net: "E:/Caffe-windows/caffe-windows/examples/mnist/lenet_train_test.prototxt"
#这个参数要跟test_layer结合起来考虑,在test_layer中一个batch是100,而总共的测试图片是10000张
#所以这个参数就是10000/100=100
test_iter: 100
#每迭代500次进行一次测试
test_interval: 500
#学习率
base_lr: 0.01
#动力
momentum: 0.9
#type:SGD #优化算法的选择。这一行可以省略,因为默认值就是SGD,Caffe中一共有6中优化算法可以选择
#Stochastic Gradient Descent (type: "SGD"), 在Caffe中SGD其实应该是Momentum
#AdaDelta (type: "AdaDelta"),
#Adaptive Gradient (type: "AdaGrad"),
#Adam (type: "Adam"),
#Nesterov’s Accelerated Gradient (type: "Nesterov")
#RMSprop (type: "RMSProp")
#权重衰减项,其实也就是正则化项。作用是防止过拟合
weight_decay: 0.0005
#学习率调整策略
#如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power),其中iter表示当前的迭代次数
lr_policy: "inv"
gamma: 0.0001
power: 0.75
#每训练100次屏幕上显示一次,如果设置为0则不显示
display: 100
#最大迭代次数
max_iter: 2000
#快照。可以把训练的model和solver的状态进行保存。每迭代5000次保存一次,如果设置为0则不保存
snapshot: 5000
snapshot_prefix: "E:/Caffe-windows/caffe-windows/examples/mnist/models"
#选择运行模式
solver_mode: GPU
 
test_iter:表示网络的测试迭代次数。网络一次迭代将一个batchSize的图片进行测试,所以为了能将validation集中所有图片都测试一次,这个参数乘以TEST的batchSize应该等于validation集中图片总数量。即test_iter*batchSize=val_num。注:这里的test是将训练集=训练+测试,test是这里的测试。
 
test_interval:表示网络迭代多少次进行一次测试。一次迭代即一个batchSize的图片通过网络正向传播和反向传播的整个过程。比如这里设置的是224,即网络每迭代224次即对网络的准确率进行一次验证。一般来说,我们需要将训练集中所有图片都跑一编,再对网络的准确率进行测试,整个参数乘以网络data层(TRAIN)中batchSize参数应该等于训练集中图片总数量。即test_interval*batchSize=train_num。
 
base_lr:表示网络的基础学习率。学习率过高可能导致loss持续86.33333,也可能导致loss无法收敛等等问题。过低的学习率会使网络收敛慢,也有可能导致梯度损失。一般我们设置为0.01。
 
display: 每多少次显示在窗口一次。
 
max_iter: 网络的最大迭代次数。训练集中的图片当然不能只训练一次就算了,要反复多次的进行训练,所以这个参数应该要大一些。
 
lr_policy: 学习率变化。
 
gamma: 学习率变化比率。一般不改。
 
momentum: 学习的参数。一般不改。
 
weight_decay: 学习的参数。一般不改。
 
stepsize: 每多少次学习率递减。这里是迭代2218次学习率递减。
 
snapshot: 每多少次保存一次学习的结果。即caffemodel。
 
solver_mode: 设置使用GPU还是CPU进行学习训练。
 
net:  网络结构的文件路径。
 
solver_type: 优化算法的选择,一共有六种可选:SGD、AdaDelta、AdaGrad、Adam、Nesterov和RMSProp。默认为SGD。
 

2. deploy.prototxt和train_val.prototx

这两个文件是caffe的网络结构文件。train_val.prototx是训练时候的网络结构,deploy.prototxt用于发布(即测试时候的网络结构)。这两个文件中内容基本一致,但是存在一些细微区别:
 
  1. 在train_val.prototx中网络结构的data层有两种,分别为TRAIN和TEST。顾名思义,TRAIN是网络训练时后的数据结构,TEST是网络做验证时候的数据结构。一般来说TRAIN中的batchSize比TEST中的要大一些。
  2. 在train_val.prototx中的卷积层(Convolution)中存在学习率和权重衰减的参数,而deploy.prototxt文件中则没有这些参数(有些deploy.prototxt中仍然有这些参数,但是对测试不起任何作用)。
 
由于train_val.prototx包含了deploy.prototxt文件中所有的参数定义,所以下面以train_val.prototx文件为例,详细说明每个参数的意义。这里以经典的AlexNet网络为例:

1 data层

 layer {
name: "train-data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 227
mean_file: "./mean.binaryproto"
}
data_param {
source: "./train_db"
batch_size: 128
backend: LMDB
}
}
name: 这一层的名字。
type:这一层的类型。
top: 这一层所连接的上一层。注意,网络是从下往上生长的。最底层是数据层,越往上特征越抽象。
phase: TRAIN 表示这一层是训练时候网络的定义。
mirror:是否使用镜像。
crop_size:将输入数据裁剪为227。
mean_file:均值文件的路径。
source:训练集的路径。
batch_size:一次迭代输入的图片数量。
backend:数据集的格式。

2. Convolution层

 layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param {
lr_mult: 1.0
decay_mult: 1.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
convolution_param {
num_output: 96
kernel_size: 11
stride: 4
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0.0
}
}
}

lr_mult: 学习率。这里有两个学习率,分别是filter和bias的学习率。

decay_mult::衰减系数。同样有两个,与学习率对应。

num_output::这一层输出的特征图个数。即改成用多少个卷积核去对输入做卷积操作。

kernel_size:卷积核的尺寸。

stride:卷积的步长。

weight_filler {
      type: "gaussian"
      std: 0.01
    }

整个参数是表示使用高斯方法初始化滤波器参数。这里是使用均值为0,方差为0.01的高斯核。

bias_filler {
      type: "constant"
      value: 0.0
    }

整个参数表示使用constant方法初始化偏置。即初始偏置设置为0。

补充

 训练的时候使用的是 caffe-windows\Build\x64\Release\caffe.exe 对 solver.prototxt 模型进行训练。

mnist对图片进行预处理转换使用的是 caffe-windows\Build\x64\Debug\convert_mnist_data.exe

分类测试使用的是 E:\caffe\caffe-windows\Build\x64\Debug\classification.exe

计算均值使用的是 caffe-windows\Build\x64\Debug\compute_image_mean.exe ,输入是lmdb,输出均值文件xxxx.binaryproto

caffemodel和solverstate

在caffe训练完网络之后,会生成两个文件一个caffemodel和solberstate,caffemodel是各层的参数,也就是训练之后的网络模型最重要的文件,而 solverstate则是快照,就是可以通过该文件继续进行迭代(类似于断点续传)。

这两个文件的位置请看你训练网络的 solver.prototxt文件,这里面的 snapshot_prefix字段里写了文件生成的位置。

caffe(1) 网络结构层参数详解的更多相关文章

  1. Oracle10g数据泵impdp参数详解--摘自网络

    Oracle10g数据泵impdp参数详解 2011-6-30 12:29:05 导入命令Impdp •      ATTACH 连接到现有作业, 例如 ATTACH [=作业名]. •      C ...

  2. Nginx主配置参数详解,Nginx配置网站

    1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...

  3. iptables参数详解

    iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...

  4. mha配置参数详解

    mha配置参数详解: 参数名字 是否必须 参数作用域 默认值 示例 hostname Yes Local Only - hostname=mysql_server1, hostname=192.168 ...

  5. mysql5.6主从参数详解

    mysql5.6的主从相当的不错,增加了不少参数,提升了主从同步的安全和效率,以下是mysql5.6主从参数详解. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  6. PHP curl 参数详解

    PHP curl参数详解,分享一下. curl_setopt (PHP 4 >= 4.0.2) curl_setopt -- 为CURL调用设置一个选项 描述 bool curl_setopt ...

  7. Nginx 主配置文件参数详解

    Nginx 主配置文件参数详解 Nginx 安装完毕后,会有响应的安装目录,安装目录里 nginx.conf 为 nginx 的主配置文件, ginx 主配置文件分为 4 部分,main(全局配置). ...

  8. 以太坊客户端Geth命令用法-参数详解

    Geth在以太坊智能合约开发中最常用的工具(必备开发工具),一个多用途的命令行工具. 熟悉Geth可以让我们有更好的效率,大家可收藏起来作为Geth命令用法手册. 本文主要是对geth help的翻译 ...

  9. Spark参数详解 一(Spark1.6)

    Spark参数详解 (Spark1.6) 参考文档:Spark官网 在Spark的web UI在"Environment"选项卡中列出Spark属性.这是一个很有用的地方,可以检查 ...

随机推荐

  1. Linux就该这么学 20181005(第九章SSH远程对话)

    参考链接https://www.linuxprobe.com/ nmtui开启网卡设置 ONBOOT=yes systemctl restart network nmcli connection sh ...

  2. 升级Ubuntu18.04后遇到的坑

    升级过程:   直接do-release-update 就可以直接从16.04更新到18.04了. 中间会提升更新一些配置文件, 我大部分都选择了N. 然后就成功升级到18.04了, 显卡驱动什么的都 ...

  3. 【原创】JMS生产者和消费者【PTP异步接收消息】

    PTP模式下,异步接收消息需要定义一个MessageListener来监听,当生产者有消息要发送时会主动通知Listener去处理该消息,会调用监听的onMessage方法去处理. 首先看生产者(和同 ...

  4. 《剑指offer》数组中出现次数超过一半的数字

    一.题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出 ...

  5. 全国所有省市县地理坐标Json格式

    https://www.cnblogs.com/yzbubble/p/7707129.html

  6. Linux头文件的设置

    GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径. 1.include头文件路径 除了默认的/usr/include, /usr/local/include ...

  7. Java基础学习总结(46)——JAVA注解快速入门

    各位开发童鞋,注解这个东西我们肯定每天都能看见,也许有时候看的太多了到是会忽略注解这东西具体是如何工作的.今天在这里用最短的篇幅快速讲解下注解的原理,对这块记的不太清楚的同学也可以再次看看,下次有人详 ...

  8. Oracle11g R2创建PASSWORD_VERIFY_FUNCTION相应password复杂度验证函数步骤

    Oracle11g R2创建PASSWORD_VERIFY_FUNCTION相应密码复杂度验证函数步骤 运行測试环境:数据库服务器Oracle Linux 5.8 + Oracle 11g R2数据库 ...

  9. [Angular] Configure an Angular App at Compile Time with the Angular CLI

    Compile time configuration options allow you to provide different kind of settings based on the envi ...

  10. js 压缩图片 H5

    原理 用 canvas的 toDataURI (type , int )  如果type参数的值为image/jpeg或image/webp,则第二个参数的值如果在0.0和1.0之间的话,会被看作是图 ...