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

1. solver.prototxt

solver.prototxt是caffe的配置文件。里面定义了网络训练时候的各种参数,比如学习率、权重衰减、迭代次数等等。下面详细说明每一个参数所代表的意义:
[html] view plaincopy
  1. test_iter: 299
  2. test_interval: 224
  3. base_lr: 0.01
  4. display: 20
  5. max_iter: 6720
  6. lr_policy: "step"
  7. gamma: 0.1
  8. momentum: 0.9
  9. weight_decay: 0.0001
  10. stepsize: 2218
  11. snapshot: 224
  12. snapshot_prefix: "snapshot"
  13. solver_mode: GPU
  14. net: "train_val.prototxt"
  15. solver_type: SGD

test_iter:表示网络的测试迭代次数。网络一次迭代将一个batchSize的图片进行测试,所以为了能将validation集中所有图片都测试一次,这个参数乘以TEST的batchSize应该等于validation集中图片总数量。即test_iter*batchSize=val_num。

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。
solver.prototxt文件只在网络进行训练的时候需要载入。是网络训练的一个整体的参数配置文件。

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层

[html] view plaincopy
  1. layer {
  2. name: "train-data"
  3. type: "Data"
  4. top: "data"
  5. top: "label"
  6. include {
  7. phase: TRAIN
  8. }
  9. transform_param {
  10. mirror: true
  11. crop_size: 227
  12. mean_file: "./mean.binaryproto"
  13. }
  14. data_param {
  15. source: "./train_db"
  16. batch_size: 128
  17. backend: LMDB
  18. }
  19. }

name: 这一层的名字。

type:这一层的类型。
top: 这一层所连接的上一层。注意,网络是从下往上生长的。最底层是数据层,越往上特征越抽象。
phase: TRAIN 表示这一层是训练时候网络的定义。
mirror:是否使用镜像。
crop_size:将输入数据裁剪为227。
mean_file:均值文件的路径。
source:训练集的路径。
batch_size:一次迭代输入的图片数量。
backend:数据集的格式。

2. Convolution层

[html] view plaincopy
  1. layer {
  2. name: "conv1"
  3. type: "Convolution"
  4. bottom: "data"
  5. top: "conv1"
  6. param {
  7. lr_mult: 1.0
  8. decay_mult: 1.0
  9. }
  10. param {
  11. lr_mult: 2.0
  12. decay_mult: 0.0
  13. }
  14. convolution_param {
  15. num_output: 96
  16. kernel_size: 11
  17. stride: 4
  18. weight_filler {
  19. type: "gaussian"
  20. std: 0.01
  21. }
  22. bias_filler {
  23. type: "constant"
  24. value: 0.0
  25. }
  26. }
  27. }

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中还有RELU,pooling,LRN,SoftMax,IP,FC等层。这些层参数比较少,也比较容易理解。这里就不详细介绍了。

caffe中网络结构参数详解相关推荐

  1. Linux系统中网络配置详解

    从linux诞生的那一天起,就注定了它的网络功能空前地强大.所以在linux系统中如何配置网络,使其高效,安全的工作就显得十分重要.下面我们就从网络设备的安装,网络服务的设置和网络安全性三个方面来介绍 ...

  2. Linux系统中网络配置详解(一)

       从linux诞生的那一天起,就注定了它的网络功能空前地强大.所以在linux系统中如何配置网络,使其高效,安全的工作就显得十分重要.下面我们就从网络设备的安装,网络服务的设置和网络安全性三个方面 ...

  3. web中网络编程详解

    今天是冬至,不知道大家有没有吃饺子啊! 每日分享: 冬至是北半球一年之中夜晚最长的一天,愿你在这个长夜能融化掉这一年所有的不快乐!! 目录: IP地址的介绍 端口和端口号的介绍 TCP的介绍 sock ...

  4. caffe中Makefile.config详解

    ## Refer to http://caffe.berkeleyvision.org/installation.html # Contributions simplifying and improv ...

  5. ubuntu系统写路由指令_在Ubuntu中如何查看网络路由表详解,

    在Ubuntu中如何查看网络路由表详解, 什么是Linux中的路由和路由表? 路由的过程意味着IP包在网络上从一点传输到另一点.当你向某人发送电子邮件时,你实际上是在将一系列IP数据包或数据报从你的系 ...

  6. caffe网络模型各层详解(中文版)

    caffe网络模型各层详解(中文版) 参考网址:https://blog.csdn.net/qq_34220460/article/details/79872830 一.数据层及参数 要运行caffe ...

  7. Docker(十四):Docker:网络模式详解

    Docker作为目前最火的轻量级容器技术,牛逼的功能,如Docker的镜像管理,不足的地方网络方面. Docker自身的4种网络工作方式,和一些自定义网络模式 安装Docker时,它会自动创建三个网络 ...

  8. Linux中iptraf命令详解(IP局域网监控工具)

    2019独角兽企业重金招聘Python工程师标准>>> Linux中iptraf命令详解(IP局域网监控工具) 发布时间:2017-12-27 20:46:03   作者:佚名    ...

  9. 用netstat查看网络状态详解

    --用netstat查看网络状态详解 -----------------------------2014/06/11 一.Linux服务器上11种网络连接状态:                     ...

  10. ARP命令详解--网络命令详解二

    显示和修改"地址解析协议 (ARP)"缓存中的项目.ARP 缓存中包含一个或多个表,它们用于存储 IP 地址及其经过解析的以太网或令牌环物理地址.计算机上安装的每一个以太网或令牌环 ...

最新文章

  1. Jquery 将表单序列化为Json对象
  2. BATCH+VBS脚本自动执行命令
  3. mysql t-sql,将T-SQL转换为MySQL
  4. VS Tips]Visual Studio 2008 Toolbox里控件消失(#13119)的问题
  5. vscode用作markdown入门2--代码上下标目录字体
  6. CodeDom六--实体类生成示例
  7. RedHat as4 u2下的oracle9.2.0.4安装
  8. 陈国荣 计算机科学,信息工程中计算机网络技术的应用-网络技术论文-计算机论文(10页)-原创力文档...
  9. CUDA文件缺失解决方法——以cudart64_110.dll not found为例
  10. 计算机系军训口号四句霸气,军训口号四句霸气一班
  11. 个人信贷不良资产管理 难题亟待解决
  12. 如何给产品引流?一个产品如何做引流?
  13. java8我的世界打不开_我的世界打不开
  14. 史上最详细SharePoint 2007安装步骤图解新手教程
  15. Bitdefender 查询域名和url是否恶意
  16. Linux部署集群入门
  17. 【bitset乱搞】BZOJ3687 简单题
  18. AIGC用于智能写作的技术综述-达观数据
  19. leetcode 974 Subarray Sums Divisible by K
  20. 开放世界游戏中的大地图的实现——内容制作篇/异次元篇

热门文章

  1. 深入浅出数据中心里的OpenStack
  2. Ubuntu 下使用apt-get安装最新版本的MySQL
  3. 38.使用标签-基础表单标签
  4. 如何使用Orchard搭建敏捷个人的网站(2)
  5. 敏捷思维-架构设计中的方法学(11)精化和合并
  6. vlookup+match高亮显示行
  7. 隐马尔可夫模型HMM(一)
  8. Python全栈开发——线程与进程的概念
  9. Noip2011提高组 聪明的质监员
  10. 项目经理,别让猴子跳回背上!