zoukankan      html  css  js  c++  java
  • 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)。
        当然,数据如果训练时数据层涉及到预处理,可以保留对应的预处理层或者直接对图像进行预处理,再输入到网络(一般用这种方法)

     
     
  • 相关阅读:
    23种设计模式-桥接模式
    23种设计模式-单列模式
    23种设计模式-迭代器模式
    23种设计模式-组合模式
    23种设计模式-备忘录模式
    23种设计模式-适配器模式
    23种设计模式-状态模式
    SVN的安装和应用
    线程、线程池
    条形码
  • 原文地址:https://www.cnblogs.com/guohaoyu110/p/7482319.html
Copyright © 2011-2022 走看看