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

Can't set Solver to Adam in Caffe?

所以这是我的 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

显然应该将类型设置为 Adam。然而,当我 运行 使用这个求解器进行训练时,我的主管指出它看起来像是在使用 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?如果是这样,为什么它不会切换到 Adam?我看不出这里还需要什么其他步骤...

"Adam" 是 "SGD" 求解器的一个特例:使用小批量,每次迭代给出局部梯度的随机估计。不同的求解器类型在使用这种随机估计更新权重的方式上有所不同。
查看您的 'solverstate''caffemodel' 快照,您会注意到 'solverstate' 占用的磁盘 space 是 'caffemodel' 的两倍 - 这是因为 "Adam" 求解器存储每个可训练参数的均值和标准差 ("moment")。如果您使用普通 "SGD" 解算器,您的 'caffemodel''solverstate' 将具有相同的文件大小。