分享好友 人工智能首页 频道列表

caffe(1) 网络结构层参数详解

Caffe教程  2023-02-09 19:247380

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

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

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

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

 1 #网络模型描述文件
 2 #也可以用train_net和test_net来对训练模型和测试模型分别设定
 3 #train_net: "xxxxxxxxxx"
 4 #test_net: "xxxxxxxxxx"
 5 net: "E:/Caffe-windows/caffe-windows/examples/mnist/lenet_train_test.prototxt"
 6 #这个参数要跟test_layer结合起来考虑,在test_layer中一个batch是100,而总共的测试图片是10000张
 7 #所以这个参数就是10000/100=100
 8 test_iter: 100
 9 #每迭代500次进行一次测试
10 test_interval: 500
11 #学习率
12 base_lr: 0.01
13 #动力
14 momentum: 0.9
15 #type:SGD #优化算法的选择。这一行可以省略,因为默认值就是SGD,Caffe中一共有6中优化算法可以选择
16 #Stochastic Gradient Descent (type: "SGD"), 在Caffe中SGD其实应该是Momentum
17 #AdaDelta (type: "AdaDelta"),
18 #Adaptive Gradient (type: "AdaGrad"),
19 #Adam (type: "Adam"),
20 #Nesterov’s Accelerated Gradient (type: "Nesterov")
21 #RMSprop (type: "RMSProp")
22 #权重衰减项,其实也就是正则化项。作用是防止过拟合
23 weight_decay: 0.0005
24 #学习率调整策略
25 #如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power),其中iter表示当前的迭代次数
26 lr_policy: "inv"
27 gamma: 0.0001
28 power: 0.75
29 #每训练100次屏幕上显示一次,如果设置为0则不显示
30 display: 100
31 #最大迭代次数
32 max_iter: 2000
33 #快照。可以把训练的model和solver的状态进行保存。每迭代5000次保存一次,如果设置为0则不保存
34 snapshot: 5000
35 snapshot_prefix: "E:/Caffe-windows/caffe-windows/examples/mnist/models"
36 #选择运行模式
37 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层

 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层

 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-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教程】的文章

展开全文
相关推荐
反对 0
举报 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
caffe调试 ubuntu1404+eclipse
转自:http://blog.csdn.net/yaoxingfu72/article/details/47999795首先确保你caffe编译成功,而且makefile.config中将DEBUG:=1那一行取消注释,我的caffe根目录为 caffe-master。你也可以在Eclipse中编译caffe,我是先编译好caffe,然后进入Eclipse中调试1

0评论2023-03-08522

Caffe hdf5 layer data 大于2G 的导入
问题:      Datatype class: H5T_FLOAT,      Check failed: error == cudaSuccess (2 vs. 0)  out of memory.      hdf5 layer 最大的导入的大小是2G, 超过会报错[1]。解决方法:     有人 h5repart -m1g 将数据集分割成多个文件每个是

0评论2023-02-10987

caffe神经网络中不同的lr_policy间的区别
lr_policy可以设置为下面这些值,相应的学习率的计算为:- fixed:   保持base_lr不变.- step:    如果设置为step,则还需要设置一个stepsize,  返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示当前的迭代次数- exp:     返回base_lr

0评论2023-02-10949

Ubuntu配置GPU+CUDA+CAFFE ubuntu配置dns
参考网站:http://blog.csdn.net/xizero00/article/details/43227019/ (主要参考)http://www.cnblogs.com/platero/p/3993877.html (caffe+cudaGPU)http://www.cnblogs.com/platero/p/4118139.html (cuDNN)http://developer.download.nvidia.com/compute/cuda/

0评论2023-02-10616

关于深度学习(deep learning)的常见疑问 --- 谷歌大脑科学家 Caffe缔造者 贾扬清
问答环节问:在finetuning的时候,新问题的图像大小不同于pretraining的图像大小,只能缩放到同样的大小吗?” 答:对的:)问:目前dl在时序序列分析中的进展如何?研究思路如何,能简单描述一下么答:这个有点长,可以看看google最近的一系列machine trans

0评论2023-02-10646

深度学习框架Caffe —— Deep learning in Practice
因工作交接需要, 要将caffe使用方法及整体结构描述清楚。 鉴于也有同学问过我相关内容, 决定在本文中写个简单的tutorial, 方便大家参考。 本文简单的讲几个事情:Caffe能做什么?为什么选择caffe?环境整体结构Protocol buffer训练基本流程Python中训练Debu

0评论2023-02-09598

使用caffe的HDF5数据完毕回归任务
    一直在研究怎样用caffe做行人检測问题。然而參考那些经典结构比方faster-rcnn等,都是自己定义的caffe层来完毕的检測任务。这些都要求对caffe框架有一定程度的了解。近期看到了怎样用caffe完毕回归的任务,就想把检測问题当成回归问题来解决。   

0评论2023-02-09943

Caffe 编译: undefined reference to imencode()
本系列文章由 @yhl_leo 出品,转载请注明出处。 文章链接:http://blog.csdn.net/yhl_leo/article/details/52150781 整理之前编译工程中遇到的一个Bug,贴上提示log信息:...CXX/LD -o .build_release/examples/siamese/convert_mnist_siamese_data.bin.build

0评论2023-02-09884

[caffe]caffe资料收集 Caffeine.
1.caffe主页,有各种tutorial。2.Evan Shelhamer的tutorial,包括视频。 

0评论2023-02-09776

caffe_ssd学习-用自己的数据做训练 ssd caffe
几乎没用过linux操作系统,不懂shell编程,linux下shell+windows下UltraEdit勉勉强强生成了train.txt和val.txt期间各种错误辛酸不表,照着examples/imagenet/readme勉勉强强用自己的数据,按imagenet的训练方法,把reference_caffenet训起来了,小笔记本的风

0评论2023-02-09664

caffe Python API 之中值转换
# 编写一个函数,将二进制的均值转换为python的均值def convert_mean(binMean,npyMean):blob = caffe.proto.caffe_pb2.BlobProto()bin_mean = open(binMean, 'rb' ).read()blob.ParseFromString(bin_mean)arr = np.array( caffe.io.blobproto_to_array(blob)

0评论2023-02-09843

Windows10安装ubuntu & caffe GPU版
1.Ubuntu https://www.cnblogs.com/EasonJim/p/7112413.htmlhttps://blog.csdn.net/jesse_mx/article/details/61425361 安装后启动不了,直接进入windows.解决方案:https://www.cnblogs.com/lymboy/p/7783756.htmlhttps://jingyan.baidu.com/article/5553fa

0评论2023-02-091018

更多推荐