AFAIK,我们有两种方法可以获得验证损失
(1)在训练过程中通过设置求解器在线进行如下操作:
train_net:Driver.FindElement(By.Name("mpcName"));
'train.prototxt'
(2)基于.caffemodel文件中的权重离线。在这个问题中,由于GPU有限,我认为是第二种方式。首先,我在test_net: "test.prototxt"
test_iter: 200
test_interval: 100
每100次迭代后将网络权重保存到.caffemodel。基于这些.caffemodel,我想计算验证损失
snapshot: 100
其中../build/tools/caffe test -model ./test.prototxt -weights $snapshot -iterations 10 -gpu 0
是.caffemodel的文件名。例如snapshot
我的测试原型的数据层是
snap_network_100.caffemodel
第一种和第二种方式会产生不同的验证损失。我发现验证损失的第一种方式与批量大小无关。这意味着不同批次大小的验证损失相同。然而,第二种方式,验证损失随着不同的批量大小而变化,但损失与不同的迭代非常接近。
我的问题是计算验证损失的方法是正确的?
答案 0 :(得分:2)
您计算不同迭代次数的验证损失:
test_iter: 200
从命令行运行时,在'solver.prototxt'
,与-iterations 10
对比。这意味着您要对不同数量的验证样本进行平均损失
由于在命令行验证时使用的样本少得多,因此您对batch_size更加敏感
确保您使用完全相同的设置并验证验证损失是否确实相同。