一个时期后深度神经网络模型停止学习

时间:2020-09-28 03:26:15

标签: machine-learning deep-learning neural-network pytorch unsupervised-learning

我正在训练一种无监督的NN模型,由于某种原因,在恰好一个时期(80步)之后,该模型停止学习。 enter image description here] 您是否知道为什么会发生这种情况,我应该怎么做才能防止这种情况发生?

这是有关我的NN的更多信息: 我有一个深层次的NN试图解决优化问题。我的损失函数是自定义的,它是优化问题中的目标函数。 因此,如果我的优化问题是k = open ("key.bin", "rb") t = open ("text.bin", "rb") k.seek(0); t.seek(0); position = 0 while 1: offset = k.read(1) mask = bytes(chr(k.read(2)[1]),'utf8') print(str(mask)) if not offset: break if not mask: break shift=int(ord(offset)) print(shift) position = position + shift t.seek(position) a = t.read(1) output = (ord(mask)^ord(a)) print (chr(output), end="") k.close() ; d.close() ,现在在我的DNN min f(x) ==> loss中。我有64个输入,64个输出,介于两者之间:

loss = f(x)

最后一层是:

self.l1 = nn.Linear(input_size, hidden_size)
self.relu1 = nn.LeakyReLU()
self.BN1 = nn.BatchNorm1d(hidden_size)

扩展我的网络。 拥有更多的层和节点(两倍:每200个节点8层),我可以朝着更低的误差获得更多的进步,但是经过100步的训练误差又变得平坦了!

enter image description here

1 个答案:

答案 0 :(得分:0)

症状是训练损失相对较早地停止改善。假设您的问题是完全可以学习的,则出现这种现象的原因很多。以下是最相关的:

  • 输入的预处理不当:神经网络更喜欢输入 零均值。例如,如果输入全部为正,它将限制 权重将沿相同方向更新,可能不相同 (https://youtu.be/gYpoJMlgyXA)。

因此,您可能要从所有图像中减去平均值(例如,从3个通道中的每个通道中减去127.5)。缩放以使每个通道的单位标准偏差也可能会有所帮助。

  • 网络的泛化能力:网络并不复杂 或足够深的任务。

    这很容易检查。您只需几个培训网络 图片(例如3到10)。网络应该能够适应 数据并导致损失几乎为零。如果不是这种情况,则可能 必须添加更多的层,例如使用1个以上的密集层。

另一个好主意是使用预先训练的砝码(在Keras文档的应用程序中)。您可以调整顶部的密集层以适合您的问题。

  • 权重初始化不正确。重量初始化不当会 阻止网络融合(https://youtu.be/gYpoJMlgyXA, 和以前一样的视频。

    对于ReLU激活,您可能需要使用He初始化 而不是默认的Glorot初始化。我发现这可能是 有时但并非总是必要。

最后,您可以使用Keras调试工具,例如keras-vis,keplr-io,deep-viz-keras。它们对于打开卷积网络的黑匣子非常有用。

我遇到了同样的问题,然后遵循以下规定: 看完博客文章后,我设法确定我的问题是由标签的编码引起的。最初,我将它们作为一键编码,看起来像[[0,1],[1,0],[1,0]],在博客文章中它们的格式为[0 1 0 0 1]。更改标签并使用二进制交叉熵已经使我的模型可以正常工作。感谢Ngoc Anh Huynh和rafaelvalle!