在 ILSVRC12 上学习 ZFNet 时测试精度无法提高
Test accuracy cannot improve when learning ZFNet on ILSVRC12
我已经为我的研究实现了一个自制的 ZFNet (prototxt)。在使用定义进行 20k 次迭代后,测试精度保持在 ~0.001(即 1/1000),测试损失保持在 ~6.9,训练损失保持在 ~6.9,这似乎是网络在 1k 类。我彻底检查了整个定义并尝试更改一些超参数以开始新的训练,但无济于事,屏幕上显示相同的结果....
任何人都可以给我一些光吗?提前致谢!
prototxt中的超参数来源于论文[1]。正如论文中的图 3 所示,各层的所有输入和输出似乎都是正确的。
调整是:
crop
-s 用于训练和测试的输入设置为 225
而不是 #33 中讨论的 224
;
conv3
、conv4
和 conv5
的一个像素零填充以使斑点的大小一致 [1];
所有可学习层的填充类型从 [1] 中的 constant
更改为 std: 0.01
中的 gaussian
;
weight_decay
:按照 @sergeyk 在 PR #33 中的建议从 0.0005
更改为 0.00025
;
[1] Zeiler, M. 和 Fergus, R. 可视化和理解卷积网络,ECCV 2014。
对于不好的部分...,我粘贴了它here
几点建议:
- 将初始化从
gauss
更改为 xavier
。
- 使用
"PReLU"
个激活,而不是 "ReLU"
。一旦您的网络收敛,您就可以微调以删除它们。
- 尝试将
base_lr
减少一个数量级(甚至两个数量级)。
我已经为我的研究实现了一个自制的 ZFNet (prototxt)。在使用定义进行 20k 次迭代后,测试精度保持在 ~0.001(即 1/1000),测试损失保持在 ~6.9,训练损失保持在 ~6.9,这似乎是网络在 1k 类。我彻底检查了整个定义并尝试更改一些超参数以开始新的训练,但无济于事,屏幕上显示相同的结果....
任何人都可以给我一些光吗?提前致谢!
prototxt中的超参数来源于论文[1]。正如论文中的图 3 所示,各层的所有输入和输出似乎都是正确的。
调整是:
crop
-s 用于训练和测试的输入设置为225
而不是 #33 中讨论的224
;conv3
、conv4
和conv5
的一个像素零填充以使斑点的大小一致 [1];所有可学习层的填充类型从 [1] 中的
constant
更改为std: 0.01
中的gaussian
;weight_decay
:按照 @sergeyk 在 PR #33 中的建议从0.0005
更改为0.00025
;
[1] Zeiler, M. 和 Fergus, R. 可视化和理解卷积网络,ECCV 2014。
对于不好的部分...,我粘贴了它here
几点建议:
- 将初始化从
gauss
更改为xavier
。 - 使用
"PReLU"
个激活,而不是"ReLU"
。一旦您的网络收敛,您就可以微调以删除它们。 - 尝试将
base_lr
减少一个数量级(甚至两个数量级)。