【问题标题】:deep neural network model stops learning after one epoch深度神经网络模型在一个 epoch 后停止学习
【发布时间】:2021-01-13 15:29:14
【问题描述】:

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

这是关于我的 NN 的更多信息: 我有一个试图解决优化问题的深度神经网络。我的损失函数是定制的,它是我在优化问题中的目标函数。 所以如果我的优化问题是min f(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 步后训练误差再次变平!

【问题讨论】:

  • 请说你正在训练什么样的无监督以获得更多帮助,例如强化模型?如果你能详细说明你的超参数、模型深度、你的问题和你选择的算法,那就更好了。
  • 嗨托比,感谢您的评论。我更新了我的帖子。

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


【解决方案1】:

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

  • 输入预处理不当:神经网络更喜欢输入 零均值。例如,如果输入都是正数,它将限制 权重在同一方向更新,这可能不是 可取的 (https://youtu.be/gYpoJMlgyXA)。

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

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

    这很容易检查。你可以在几个 图像(例如从 3 到 10)。网络应该能够过拟合 数据并将损失驱动到几乎为0。如果不是这种情况,您可以 必须添加更多层,例如使用超过 1 个 Dense 层。

另一个好主意是使用预训练的权重(在 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!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    相关资源
    最近更新 更多