Python 卷积神经网络(tensorflow)中损失函数的周期模式

Python 卷积神经网络(tensorflow)中损失函数的周期模式,python,tensorflow,loss-function,cross-entropy,dropout,Python,Tensorflow,Loss Function,Cross Entropy,Dropout,我正在使用Tensorflow中实现的卷积神经网络(cnn)进行图像分割。我有两个类,我使用交叉熵作为损失函数和Adam优化器。 我正在用大约150张图片训练网络 在训练过程中,我看到这种周期性的模式,训练损失下降,直到它有一对高值,然后它迅速下降到上一个水平 在验证损失中也可以观察到类似的模式,验证损失在几个时期内周期性下降,然后返回到前一个水平 通过降低学习率,这种模式不再可见,但损失更高,联合拦截(IoU)也更低 编辑:我发现我有两张带有两个稍有不同标签的图像。我还注意到,这种模式与退

我正在使用Tensorflow中实现的卷积神经网络(cnn)进行图像分割。我有两个类,我使用交叉熵作为损失函数和Adam优化器。 我正在用大约150张图片训练网络

在训练过程中,我看到这种周期性的模式,训练损失下降,直到它有一对高值,然后它迅速下降到上一个水平

在验证损失中也可以观察到类似的模式,验证损失在几个时期内周期性下降,然后返回到前一个水平

通过降低学习率,这种模式不再可见,但损失更高,联合拦截(IoU)也更低

编辑:我发现我有两张带有两个稍有不同标签的图像。我还注意到,这种模式与退出有关,在训练图像学习到100%后,退出会导致在某些迭代中训练错误大量增加,从而导致峰值。有没有人因为辍学而经历过类似的事情


有人见过这样的图案吗?原因可能是什么?

您是否正确地调整了培训数据?如果数据不被洗牌,可能会发生类似的情况:您的模型只会看到某个类的输入,并习惯于这些输入(变得更好,减少损失),并且在某个点上,训练达到数据中的某个点,它会切换到另一个类,这将严重降低性能(因为此时模型偏向于另一类)。是的,我使用
random.shuffle
,尝试更改随机种子以查看是否有什么变化。我每批有两个图像,当一个历元结束时,我用所有的训练图像进行训练。我认为问题可能是一个特定的图像,但网络可以看到每个历元中的所有图像。我发现了一个答案是,我的数据集中有一个重复的图像,标签略有不同,因此数据集不一致,不可能完全了解数据集。更改后,仍然有一些明显的周期性峰值,但仅在前200个时代。