无法在Caffe中将Solver设置为Adam?

时间:2017-07-29 18:48:27

标签: neural-network deep-learning caffe solver gradient-descent

所以这是我的solver.prototxt:

net: "models/dcnf-fcsp-alexnet/train_val.prototxt"
#test_iter: 1000
#test_interval: 1000
test_initialization: false
base_lr: 0.0001
lr_policy: "step"
gamma: 0.01
stepsize: 50000
display: 20
max_iter: 1000000
momentum: 0.9
weight_decay: 0.0005
snapshot: 10000
snapshot_prefix: "/data/lesi/dcnf-fcsp-alexnet/"
type: "Adam"
solver_mode: GPU

这很谨慎,将类型设置为亚当。然而,当我使用这个求解器进行训练时,我的主管指出它看起来像是在使用SGD(因为它说的是sdg_solver.cpp):

I0728 16:18:59.490665 27998 sgd_solver.cpp:106] Iteration 41860, lr = 0.0001
I0728 16:19:26.414223 27998 solver.cpp:228] Iteration 41880, loss = 1.45618
I0728 16:19:26.414342 27998 solver.cpp:244]     Train net output #0: loss = 1.45618 (* 1 = 1.45618 loss)
I0728 16:19:26.414355 27998 sgd_solver.cpp:106] Iteration 41880, lr = 0.0001
I0728 16:19:53.348322 27998 solver.cpp:228] Iteration 41900, loss = 1.44106
I0728 16:19:53.348362 27998 solver.cpp:244]     Train net output #0: loss = 1.44106 (* 1 = 1.44106 loss)

这只是一些控制台输出混乱还是我实际使用SGD?如果是这样,为什么它不会转向亚当呢?我不明白这里还需要采取哪些步骤......

1 个答案:

答案 0 :(得分:1)

"Adam"是“SGD”求解器的一个特例:使用微缩位,每次迭代都会给出局部梯度的随机估计。不同的求解器类型在使用此随机估计来更新权重的方式上有所不同 查看您的'solverstate''caffemodel'快照,您会注意到'solverstate'占用的磁盘空间是'caffemodel'的两倍 - 这是因为每个可训练的"Adam"解算器存储参数mean和std(“moment”)。如果您使用简单的“SGD”解算器,则'caffemodel''solverstate'将具有相同的文件大小。