Machine learning 深度神经网络模型在一个历元后停止学习

Machine learning 深度神经网络模型在一个历元后停止学习,machine-learning,deep-learning,neural-network,pytorch,unsupervised-learning,Machine Learning,Deep Learning,Neural Network,Pytorch,Unsupervised Learning,我正在训练一个无监督的神经网络模型,由于某种原因,在整整一个历元(80步)之后,模型停止学习。 ] 你知道为什么会发生这种情况吗?我应该怎么做来防止它 这是有关我的NN的更多信息: 我有一个深度神经网络,试图解决一个优化问题。我的损失函数是定制的,它是我在优化问题中的目标函数。 因此,如果我的优化问题是minf(x)==>loss,现在在我的DNNloss=f(x)中。我有64个输入,64个输出,中间有3层: self.l1 = nn.Linear(input_size, hidden_size

我正在训练一个无监督的神经网络模型,由于某种原因,在整整一个历元(80步)之后,模型停止学习。 ] 你知道为什么会发生这种情况吗?我应该怎么做来防止它

这是有关我的NN的更多信息: 我有一个深度神经网络,试图解决一个优化问题。我的损失函数是定制的,它是我在优化问题中的目标函数。 因此,如果我的优化问题是
minf(x)==>loss
,现在在我的DNN
loss=f(x)
中。我有64个输入,64个输出,中间有3层:

self.l1 = nn.Linear(input_size, hidden_size)
self.relu1 = nn.LeakyReLU()
self.BN1 = nn.BatchNorm1d(hidden_size)
最后一层是:

self.l5 = nn.Linear(hidden_size, output_size)
self.tan5 = nn.Tanh()
self.BN5 = nn.BatchNorm1d(output_size)
扩展我的网络。 有了更多的层和节点(双倍:每200个节点8层),我可以在降低错误方面取得更大的进步,但在100步之后,训练错误再次变得平缓


症状是训练损失相对较早地停止改善。假设你的问题是可以学习的,有很多原因导致这种行为。以下是最相关的:

  • 输入预处理不当:神经网络倾向于使用 零均值。例如,如果输入均为正,则会限制 要在同一方向上更新的权重,可能不会 可取的()
因此,您可能希望从所有图像中减去平均值(例如,从3个通道中的每个通道中减去127.5)。缩放以使每个通道中的单位标准偏差也可能有用

  • 网络泛化能力:网络不复杂 或者足够深,可以完成任务

    这很容易检查。你可以在几分钟内训练网络 图像(从3到10)。网络应该能够过适应网络 数据和驱动器的损失几乎为0。如果不是这样,你可以 必须添加更多层,例如使用多个密集层

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

  • 权重初始化不正确。不正确的重量初始化可能会导致 防止网络会聚(, 与之前相同的视频)

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

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

我遇到了同样的问题,然后我采取了以下措施:
在浏览了一篇博客文章后,我设法确定我的问题是由于我的标签编码引起的。最初我把它们作为一个热编码,看起来像[[0,1],[1,0],[1,0]],在博客文章中它们的格式是[01,01]。将我的标签更改为这个,并使用二进制交叉熵,使我的模型能够正常工作。感谢Ngoc Anh Huynh和rafaelvalle

请说明您正在培训什么样的无监督模式以获得更多帮助,例如强化模式?如果你能告诉更多关于你的超参数、模型深度、你的问题以及你选择的算法,那就更好了。嗨,托比,谢谢你的评论。我更新了我的帖子。请让你的答案独立-什么是“博客帖子@rafaelvalle链接”?