zoukankan      html  css  js  c++  java
  • Caffe solver.prototxt学习

    在solver解决下面的四个问题: 
    a.训练的记录(bookkeeping),创建用于training以及test的网络结构; 
    b.使用前向以及反向过程对training网络参数学习的过程; 
    c.对testing网络进行评价; 
    d.优化过程中模型中间结果的快照及求解的状态; 
    下面从这个四个方面介绍solver.prototxt文件中常见参数的含义: 
    1.net,type;base_lr,lr_polilcy 
    net: 用于声明training 以及test的网络结构定义在哪个文件中,所以它是一个文件名,一般用caffe的相对路径。这个还可以分开用train_net以及test_net,相当于在两个文件中分别给出了训练以及测试网络的结构定义。 
    type:solver的类型。深度网络的目标函数一般是非凸的,一般用基于梯度下降的方法来解。caffe中支持的基于梯度的方法包括: SGD(default),AdaDelt,AdaGrad,Adam,NAG.每个方法需要设定不同的参数,这里首先分析SGD的参数: 
    base_lr:学习率(learning rate),也就是梯度算法中的步长,这个是最初的步长。 
    lr_policy: 按照某种方式对梯度算法中的步长进行更新;包含下面的方式:fixed,step,exp,inv,multistep,poly,sigmoid对这些的详细描述可以参考这个很赞的blog. 这里描述常用的基于迭代次数的方式:step。她根据iter对步长进行更新,这种方式还对应一个stepsize参数,它的值是一个整数,表示stepsize次迭代对步长进行一次更新;公式为base_lr*gamma^(iter/stepsize) 
    gamma:这个参数就是在上面的公式中更新学习率的公式中用到的参数,要注意的是不同的方式有不同参数,有些方法中可能不存在这个参数。 
    momentum(mu):它表示的是本次更新权重用的梯度对上一次梯度的保留的比例。 
    2.max_iter,display,weight_decay 
    max_iter:这个表示网络前向以及后向学习算法的次数。 
    display: 参数是一个整数,表明多少次对结果进行一此展示。如果设为0就不会打印。 
    weight_decay:权重正则项的参数,它是为了防止模型的过拟。通常而言,一般样本越多,值越小;模型越大(更深,滤波器尺寸越大等),值越大。 
    3.test_iter, test_interval: 
    test_iter:测试网络中测试的时候所用的batch数,一般保证test_iter*batch>测试样本数; 
    test_interval:每隔多少个iter对测试网络进行一个评价。 
    4.snapshot,snapshot_prefix. 
    snapshot:多少个iter保存一次网络的快照,这个有利于resume; 
    snapshot_prefix:快照存储的位置以及名称。 
    还可以设置snapshot_diff,snapshot_format.是否保存梯度值以及保存的类型。

    Reference 
    [1]http://www.cnblogs.com/denny402/p/5074049.html 
    [2]http://stackoverflow.com/questions/32177764/what-is-weight-decay-meta-parameter-in-caffe?noredirect=1&lq=1 
    [3]http://caffe.berkeleyvision.org/tutorial/solver.html

  • 相关阅读:
    perl中shift 和unshift 操作
    Perl 关于 use strict 的用法
    Windows7鼠标右键里没有新建文本文件的选项,解决办法
    大唐笔试题
    常用的设计模式
    优化C++程序编译效率的一些方法
    TCP连接,传输数据时的粘包问题讨论
    单链表是否有环及环入口点
    构造函数和析构函数能否声明为虚函数?
    azkaban 执行hive语句
  • 原文地址:https://www.cnblogs.com/is-Tina/p/7694608.html
Copyright © 2011-2022 走看看