caffe的一些概念理解

Posted 女王公园的八神

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了caffe的一些概念理解相关的知识,希望对你有一定的参考价值。

有一天,师姐问我,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)。
    当然,数据如果训练时数据层涉及到预处理,可以保留对应的预处理层或者直接对图像进行预处理,再输入到网络(一般用这种方法)

 
 








以上是关于caffe的一些概念理解的主要内容,如果未能解决你的问题,请参考以下文章

对于服务治理概念的一些总结和理解,我们应该如何实践服务治理

对于服务治理概念的一些总结和理解,我们应该如何实践服务治理

我为什么要理解storm的一些概念

JavaScript 中一些概念理解 :clientXclientYoffsetXoffsetYscreenXscreenY

Jmeter中一些概念的理解——90%响应时间事务并发

面向对象中的一些概念的理解