Caffe中的一些概念
2016-07-30 11:54
369 查看
有一天,师姐问我,epoch和iteration有什么区别?我一时语塞,竟然遍寻百度而不得,最后在stackoverflow上找到一个我认为比较靠谱的答案,虽然它不是最高票,但是是最好理解的,深得我心。原答案在此:
http://stackoverflow.com/questions/4752626/epoch-vs-iteration-when-training-neural-networks
简单起见,我用自己的语言描述一下:
epoch——使用整个训练样本集传播一次,一次传播 = 一次前向传播 + 一次后向传播。但是考虑到内存不够用的问题,训练样本们往往并不是全都一起拿到内存中去训练,而是一次拿一个batch去训练,一个batch包含的样本数称为batch
size。
iteration——使用batch size个样本传播一次。同样,一次传播=一次前向传播+一次后向传播。
eg. 我们有1000个训练样本,batch size为100,那么完成一次epoch就需要10个iteration。
先上一张图,大家很熟悉的一张图。
首先说明一个概念:在caffe中的一次迭代iterration指的是一个batch,而不是一张图片。下面就主要说下2个概念
test_iter: 在测试的时候,需要迭代的次数,即test_iter* batchsize(测试集的)=测试集的大小,测试集batchsize可以在prototx文件里设置
test_interval:interval是区间的意思,所有该参数表示:训练的时候,每迭代500次就进行一次测试。
caffe在训练的过程是边训练边测试的。训练过程中每500次迭代(也就是32000个训练样本参与了计算,batchsize为64),计算一次测试误差。计算一次测试误差就需要包含所有的测试图片(这里为10000),这样可以认为在一个epoch里,训练集中的所有样本都遍历以一遍,但测试集的所有样本至少要遍历一次,至于具体要多少次,也许不是整数次,这就要看代码,大致了解下这个过程就可以了。
Caffe提供的示例中,通常有三个文件,solver.prototxt,train_val.prototxt以及deploy.prototxt。从名字也可以知道,solver.prototxt设置求解参数,用于设置训练时的一些全局参数。train_val.prototxt为网络配置文件,是用来训练网络的。deploy.prototxt是用来进行预测的。这两者差别在于deploy.prototxt没有数据层,但是指定了输入的数据形状。
那当我们训练好了一个模型之后,怎么用train_val.prototxt生成deploy.prototxt呢?如下:
1. 删除数据层(datalayer),插入数据维度描述
2.删除损失层(loss)和精度层(accuracy),插入概率层(prob)。
当然,数据如果训练时数据层涉及到预处理,可以保留对应的预处理层或者直接对图像进行预处理,再输入到网络(一般用这种方法)
http://stackoverflow.com/questions/4752626/epoch-vs-iteration-when-training-neural-networks
简单起见,我用自己的语言描述一下:
epoch——使用整个训练样本集传播一次,一次传播 = 一次前向传播 + 一次后向传播。但是考虑到内存不够用的问题,训练样本们往往并不是全都一起拿到内存中去训练,而是一次拿一个batch去训练,一个batch包含的样本数称为batch
size。
iteration——使用batch size个样本传播一次。同样,一次传播=一次前向传播+一次后向传播。
eg. 我们有1000个训练样本,batch size为100,那么完成一次epoch就需要10个iteration。
先上一张图,大家很熟悉的一张图。
首先说明一个概念:在caffe中的一次迭代iterration指的是一个batch,而不是一张图片。下面就主要说下2个概念
test_iter: 在测试的时候,需要迭代的次数,即test_iter* batchsize(测试集的)=测试集的大小,测试集batchsize可以在prototx文件里设置
test_interval:interval是区间的意思,所有该参数表示:训练的时候,每迭代500次就进行一次测试。
caffe在训练的过程是边训练边测试的。训练过程中每500次迭代(也就是32000个训练样本参与了计算,batchsize为64),计算一次测试误差。计算一次测试误差就需要包含所有的测试图片(这里为10000),这样可以认为在一个epoch里,训练集中的所有样本都遍历以一遍,但测试集的所有样本至少要遍历一次,至于具体要多少次,也许不是整数次,这就要看代码,大致了解下这个过程就可以了。
Caffe提供的示例中,通常有三个文件,solver.prototxt,train_val.prototxt以及deploy.prototxt。从名字也可以知道,solver.prototxt设置求解参数,用于设置训练时的一些全局参数。train_val.prototxt为网络配置文件,是用来训练网络的。deploy.prototxt是用来进行预测的。这两者差别在于deploy.prototxt没有数据层,但是指定了输入的数据形状。
那当我们训练好了一个模型之后,怎么用train_val.prototxt生成deploy.prototxt呢?如下:
1. 删除数据层(datalayer),插入数据维度描述
2.删除损失层(loss)和精度层(accuracy),插入概率层(prob)。
当然,数据如果训练时数据层涉及到预处理,可以保留对应的预处理层或者直接对图像进行预处理,再输入到网络(一般用这种方法)
相关文章推荐
- nodejs中express 入门小实例
- 解析json串,利用正则表达式,split
- JS权威指南读书笔记(三)
- js-数据类型
- js-关键字和保留字
- js-初步了解
- JSP内置对象(9个常用的内置对象)
- 滑屏 H5 开发实践九问
- javascript创建对象
- JavaScript格式化日期的函数
- 认识Gson解析Json
- JS权威指南读书笔记(二)
- requestFeature() must be called before adding content
- 前端速学成财:第一课-JavaScript历史
- [JSP] c:forEach 输出序号 每行自动生成序号
- 20个为前端开发者准备的文档和指南
- 商城项目总结(二)
- offsetLeft与style.left的区别
- HTML文档可以包含的内容
- Html+CSS中子选择器