为了账号安全,请及时绑定邮箱和手机立即绑定

Keras 中的分割网络在训练期间收敛到单个类

Keras 中的分割网络在训练期间收敛到单个类

慕雪6442864 2022-01-05 19:18:59
我正在尝试使用 Tensorflow 后端在 Keras 中实现 RefineNet。我正在使用来自https://gist.github.com/flyyufelix/65018873f8cb2bbe95f429c474aa1294的 ResNet-101 前端和预训练权重。模型编译成功,但在训练期间不收敛:它总是在 1 到 5 个训练步骤后收敛到单个类。我尝试过的东西清单/虽然:输入数据是one-hot编码输入图像具有正确的对应掩码损失函数是分类交叉熵预训练的权重正确,前端正确分类输入图像(例如猫)冻结/解冻前端层似乎没有什么区别不同的优化器(Adam,SGD),不同的学习率(0.01 - 0.000001)网络甚至不会收敛到/过拟合单个训练样本类不平衡:我尝试使用加权损失,没有帮助。此外,网络并不总是收敛到最大的类。检查网络图并将它们与 RefineNet 论文中的架构进行比较。可能是某种初始化问题,但 Keras 的默认初始化是内核的 glorot_uniform 和偏差的零,想不出比这更好的了。ReLU 可能已经全部消亡,但仅在几个训练步骤后就不应该发生这种情况,对吗?我试过 LeakyRelU,没有帮助。尝试了不同的输入大小、批量大小、随机裁剪、纵横比(此时有点绝望)。尝试输入随机噪声,行为相同。最后一点让我认为架构只是无视输入,但我不知道在哪里,如何以及为什么。训练期间的示例输出:Training:Step 0, loss 15.566238403320312, acc 0.012790679931640625Step 1, loss 9.91278076171875, acc 0.36734771728515625Step 2, loss 10.994621276855469, acc 0.27989959716796875Step 3, loss 10.00101375579834, acc 0.3611602783203125Step 4, loss 11.439224243164062, acc 0.2010345458984375Step 5, loss 11.397968292236328, acc 0.229278564453125Step 6, loss 9.844161987304688, acc 0.3711433410644531Step 7, loss 9.981706619262695, acc 0.36286163330078125Step 8, loss 11.335559844970703, acc 0.21475982666015625Step 9, loss 9.997631072998047, acc 0.3608970642089844...完整代码可以在以下 Google Colab notebook 中找到:https ://colab.research.google.com/drive/1OlujuKZYhRaTm9h7rHAPEi9gkiYmQLR_我已尝试尽可能轻松地重现该问题。任何帮助/想法将不胜感激!
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

在 conv 层解决问题之后添加 Batch Normalization 层。


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号