CAFFE中训练与使用阶段网络设计的不同
神经网络中,我们通过最小化神经网络来训练网络,所以在训练时最后一层是损失函数层(LOSS),
在测试时我们通过准确率来评价该网络的优劣,因此最后一层是准确率层(ACCURACY)。
但是当我们真正要使用训练好的数据时,我们需要的是网络给我们输入结果,对于分类问题,我们需要获得分类结果,如下右图最后一层我们得到
的是概率,我们不需要训练及测试阶段的LOSS,ACCURACY层了。
下图是能过$CAFFE_ROOT/python/draw_net.py绘制$CAFFE_ROOT/models/caffe_reference_caffnet/train_val.prototxt , $CAFFE_ROOT/models/caffe_reference_caffnet/deploy.prototxt,分别代表训练时与最后使用时的网络结构。


我们一般将train与test放在同一个.prototxt中,需要在data层输入数据的source,
而在使用时.prototxt只需要定义输入图片的大小通道数据参数即可,如下图所示,分别是
$CAFFE_ROOT/models/caffe_reference_caffnet/train_val.prototxt , $CAFFE_ROOT/models/caffe_reference_caffnet/deploy.prototxt的data层
训练时, solver.prototxt中使用的是rain_val.prototxt
|
1
|
./build/tools/caffe/train -solver ./models/bvlc_reference_caffenet/solver.prototxt |
使用上面训练的网络提取特征,使用的网络模型是deploy.prototxt
|
1
|
./build/tools/extract_features.bin models/bvlc_refrence_caffenet.caffemodel models/bvlc_refrence_caffenet/deploy.prototxt |
在使用CAFFE中,训练阶段与使用阶段的网络设计有些许差别,下面我们主要研究下卷积层在两个阶段的不同,
在训练阶段,参数的初值,及学习率等参考需要设置,
下面分别是K:\deep learning\Caffe\caffe-master\caffe-master\models\bvlc_reference_caffenet\deploy.prototxt 与K:\deep learning\Caffe\caffe-master\caffe-master\models\bvlc_reference_caffenet\train_val.prototxt
第一个卷积层的网络设置,我们可以看出在训练阶段需要指定学习率,权重衰减参数,以及权重的初始化方法。
权重是使用方差为0.01的高斯函数初始化的,偏移使用0来初始化。

全连接层也有与卷积层相似的问题。

为什么只有卷积层与全连接层有此差别,而其它层木有呢?这是由于 LRN, POOLING, RELU层都是无参的,上一层固定,那么就会得到确定的值。
CAFFE层类别如下所示,分为输入层(DATA,HDF5_DATA),element_wise(ABSVAL, ELTWISE, POWER, RELU, SIGMOID, TANH,THRESHOLD等)操作,LOSS层(CONTRASTIVE_LOSS, EUCLIDEAN_LOSS, INFOGAIN_LOSS, MULTINORMIAL_LOGISTIC_LOSS, SIGMOID_CROSS_ENTROPY_LOSS, SOFTMAX_LOSS等), 除此之外分为有参层,无参层。有参层在训练阶段需要指定参数的初始化方式,学习率等参数
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
<span style="font-family: 楷体;"> enum LayerType { // "NONE" layer type is 0th enum element so that we don't cause confusion // by defaulting to an existent LayerType (instead, should usually error if // the type is unspecified). NONE = 0; ABSVAL = 35; <span style="color: #3366ff;">//abs</span> ACCURACY = 1; <span style="color: #3366ff;">//accuracy</span> ARGMAX = 30; BNLL = 2; <span style="color: #3366ff;">//BNLL (binomial normal log likelihood) 层通过 log(1 + exp(x)) 计算每一个输入x的输出。</span> CONCAT = 3; <span style="color: #3366ff;">//通过Concatenation层,可以把多个的blobs链接成一个blob。</span> CONTRASTIVE_LOSS = 37; // 还没有具体研究 CONVOLUTION = 4; <span style="color: #3366ff;">//总面积</span> DATA = 5; //数据 DROPOUT = 6; DUMMY_DATA = 32; EUCLIDEAN_LOSS = 7; ELTWISE = 25; FLATTEN = 8; HDF5_DATA = 9; HDF5_OUTPUT = 10; HINGE_LOSS = 28; IM2COL = 11; IMAGE_DATA = 12; INFOGAIN_LOSS = 13; INNER_PRODUCT = 14; LRN = 15; MEMORY_DATA = 29; MULTINOMIAL_LOGISTIC_LOSS = 16; MVN = 34; POOLING = 17; POWER = 26; RELU = 18; SIGMOID = 19; SIGMOID_CROSS_ENTROPY_LOSS = 27; SILENCE = 36; SOFTMAX = 20; SOFTMAX_LOSS = 21; SPLIT = 22; SLICE = 33; TANH = 23; WINDOW_DATA = 24; THRESHOLD = 31; }</span> |
CAFFE中训练与使用阶段网络设计的不同的更多相关文章
- caffe 中 plot accuracy和loss, 并画出网络结构图
plot accuracy + loss 详情可见:http://www.2cto.com/kf/201612/575739.html 1. caffe保存训练输出到log 并绘制accuracy l ...
- Cloud Foundry中warden的网络设计实现——iptable规则配置
在Cloud Foundry v2版本号中,该平台使用warden技术来实现用户应用实例执行的资源控制与隔离. 简要的介绍下warden,就是dea_ng假设须要执行用户应用实例(本文暂不考虑ward ...
- caffe中使用crop_size剪裁训练图片
layer { name: "data" type: "Data" top: "data" top: "label" i ...
- caffe 中如何打乱训练数据
第一: 可以选择在将数据转换成lmdb格式时进行打乱: 设置参数--shuffle=1:(表示打乱训练数据) 默认为0,表示忽略,不打乱. 打乱的目的有两个:防止出现过分有规律的数据,导致过拟合或者不 ...
- Windows下使用python绘制caffe中.prototxt网络结构数据可视化
准备工具: 1. 已编译好的pycaffe 2. Anaconda(python2.7) 3. graphviz 4. pydot 1. graphviz安装 graphviz是贝尔实验室开发的一个 ...
- 在Caffe中实现模型融合
模型融合 有的时候我们手头可能有了若干个已经训练好的模型,这些模型可能是同样的结构,也可能是不同的结构,训练模型的数据可能是同一批,也可能不同.无论是出于要通过ensemble提升性能的目的,还是要设 ...
- pycaffe︱caffe中fine-tuning模型三重天(函数详解、框架简述)
本文主要参考caffe官方文档[<Fine-tuning a Pretrained Network for Style Recognition>](http://nbviewer.jupy ...
- Windows平台上Caffe的训练与学习方法(以数据库CIFAR-10为例)
Windows平台上Caffe的训练与学习方法(以数据库CIFAR-10为例) 在完成winodws平台上的caffe环境的搭建之后,亟待掌握的就是如何在caffe中进行训练与学习,下面将进行简单的介 ...
- caffe中batch norm源码阅读
1. batch norm 输入batch norm层的数据为[N, C, H, W], 该层计算得到均值为C个,方差为C个,输出数据为[N, C, H, W]. <1> 形象点说,均值的 ...
随机推荐
- WITH common_table_expression
Feature: 公用表表达式只能包含一个SELECT,多SELECT需UNION,UNION ALL 公用表表达式只能引用一次 公用表表达式可以包括对自身的引用,这种表达式称为递归公用表表达式 -- ...
- Hack写法
文章来源: http://www.w3cplus.com/css/create-css-browers-hacks 条件注释:http://www.w3cplus.com/create-an-ie-o ...
- UVa 679 Dropping Balls (例题 6-6)
传送门:https://uva.onlinejudge.org/external/6/p679.pdf 题意:在一颗结点带开关的完全二叉树上扔球,初始时开关为关闭状态,树的深度为D(1 <= D ...
- soapui工具使用时400 Bad Request
因为项目中用json格式进行传输数据,多次确认json中的各个属性与接口中的对象属性一致,还是不能正常访问到接口.想起json数据中有中文, 在soapui的左下角将Encoding 的值设为utf- ...
- hdu_5818_Joint Stacks(线段树模拟)
题目链接:hdu_5818_Joint Stacks 题意: 给你两个栈,多了个合并操作,然后让你模拟 题解: 很容易想到O(1)的单个栈操作,O(n)的合并操作,这样肯定超时,所以我们要将时间复杂度 ...
- 搭建AVL树
#include<iostream> using namespace std; struct TreeNode { int height; //每一个结点都要保存自己的高度 int dat ...
- json 和 数组的区别
json是javascript中的一种数据格式,类似于数组,但又不同于数组,区别在于下标: 例如,var obj=[a:15,b:10,c:3,d:8]: //这是json的写法 var arr=[ ...
- 第三次冲刺spring会议(第五次会议)
[例会时间]2014/5/24 21:15 [例会地点]9#446 [例会形式]轮流发言 [例会主持]马翔 [例会记录]兰梦 小组成员:兰梦 ,马翔,李金吉,赵天,胡佳奇
- crontab定时任务
使用cron服务,用 service crond status 查看 cron服务状态,如果没有启动则 service crond start启动它, cron服务是一个定时执行的服务,可以通过cro ...
- 关于springboot启动时候报错:springboot Failed to parse configuration class [Application]
把运行的java类放在一个package下后就不再提示这个错误. 使用的ide是intellij,之前也有因为没有创建package报错的经历,可能这是intellij必须的