我为我的研究实现了一个自制的 ZFNet ( prototxt )。经过 20k 次定义迭代后,测试精度保持在 ~0.001(即 1/1000),测试损失保持在 ~6.9,训练损失保持在 ~6.9,这似乎网络一直在 1k 个类别之间玩猜谜游戏。我彻底检查了整个定义,并尝试更改一些超参数来开始新的训练,但无济于事,屏幕上显示相同的结果......
有人能给我一些启发吗?提前致谢!
<小时/>prototxt中的超参数源自论文[1]。正如论文中的图 3 所示,各层的所有输入和输出似乎都是正确的。
调整是:
crop
- 训练和测试的输入设置为225
而不是 #33 中讨论的224
;为
conv3
、conv4
和conv5
使用一像素零填充,以使 Blob 的大小保持一致 [1] ;所有可学习层的填充类型从[1]中的
constant
更改为gaussian
,其中std: 0.01
;
<weight_decay
:按照 @sergeyk 在 PR #33 中的建议,从0.0005
更改为0.00025
;
[1] Zeiler, M. 和 Fergus, R。可视化和理解卷积网络,ECCV 2014。
对于可怜的部分......,我粘贴了它here
最佳答案
一些建议:
- 将初始化从
gauss
更改为xavier
。 - 与
"PReLU"
合作激活,而不是“ReLU”。一旦你的网络收敛,你就可以微调以删除它们。 - 尝试将
base_lr
减少一个数量级(甚至两个数量级)。
关于machine-learning - 在 ILSVRC12 上学习 ZFNet 时测试精度无法提高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39663506/