solver.prototxt
net: "vggface_mycmd/vggface_train_test.prototxt"
test_iter: 365
test_interval: 500
iter_size: 4
test_initialization: false
display: 40
verage_loss: 40
base_lr: 0.00005
lr_policy: "step"
stepsize: 2000
gamma: 0.96
max_iter: 10000
momentum: 0.9
weight_decay: 0.0002
snapshot: 20
snapshot_prefix: "vggface_mycmd/mymodel"
solver_mode: CPU
首先说明一个概念:在caffe中的一次迭代iterration指的是一个batch,而不是一张图片。
test_iter: 在测试的时候,需要迭代的次数,即test_iter* batchsize(测试集的)=测试集的大小,测试集batchsize可以在prototx文件里设置
test_interval:interval是区间的意思,所有该参数表示:训练的时候,每迭代500次就进行一次测试。
caffe在训练的过程是边训练边测试的。训练过程中每500次迭代(也就是32000个训练样本参与了计算,batchsize为64),计算一次测试误差。计算一次测试误差就需要包含所有的测试图片(这里为10000),这样可以认为在一个epoch里,训练集中的所有样本都遍历以一遍,但测试集的所有样本至少要遍历一次,至于具体要多少次,也许不是整数次,这就要看max iter。
iter_size:iter_size*train batch size=实际的batch size,为什么这么说。深度学习为了加快运算速度将数据分成小的batch,但是参与batch太小,代价函数进行权重衰减太快,加上iter size之后,取iter size次的平均在进行权重衰减,比较具有代表性。注意的是,我觉得iter size的加入并不会影响前面两个参数与batch size的关系。
lr policy:是指权重衰减的规律,有几种,百度一下就知道了,这个的不同大概不怎么影响最终的准确度,可能会影响收敛速度
lr base:开始时候的学习速率,会在此基础上进行衰减,注意train net中的lr mult*lr base 代表那一层的实际学习速率。在旧版net参数中lr mult写作blobs lr