首页 > 解决方案 > Keras 中的分割网络在训练期间收敛到单个类

问题描述

我正在尝试使用 Tensorflow 后端在 Keras 中实现 RefineNet。我正在使用来自https://gist.github.com/flyyufelix/65018873f8cb2bbe95f429c474aa1294的 ResNet-101 前端和预训练权重。该模型编译成功,但在训练期间不收敛:它总是在 1 到 5 个训练步骤后收敛到一个类。

我尝试过的东西清单/虽然:

最后一点让我认为架构只是无视输入,但我不知道在哪里、如何以及为什么。

训练期间的示例输出:

Training:
Step 0, loss 15.566238403320312, acc 0.012790679931640625
Step 1, loss 9.91278076171875, acc 0.36734771728515625
Step 2, loss 10.994621276855469, acc 0.27989959716796875
Step 3, loss 10.00101375579834, acc 0.3611602783203125
Step 4, loss 11.439224243164062, acc 0.2010345458984375
Step 5, loss 11.397968292236328, acc 0.229278564453125
Step 6, loss 9.844161987304688, acc 0.3711433410644531
Step 7, loss 9.981706619262695, acc 0.36286163330078125
Step 8, loss 11.335559844970703, acc 0.21475982666015625
Step 9, loss 9.997631072998047, acc 0.3608970642089844
...

完整代码可在以下 Google Colab 笔记本中找到:https ://colab.research.google.com/drive/1OlujuKZYhRaTm9h7rHAPEi9gkiYmQLR_

我试图让重现问题尽可能简单。

任何帮助/想法将不胜感激!

标签: pythontensorflowkerasneural-networkimage-segmentation

解决方案


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


推荐阅读