【问题标题】:Resnet50 does not converge. VGG16 works fineResnet50 不收敛。 VGG16 工作正常
【发布时间】:2020-04-26 14:24:08
【问题描述】:

我使用 resnet50 作为主干训练了一个 回归 网络。网络的输入是尺寸为224*224*3的图像,网络的输出一个值,从 01

但是网络不能收敛,无论我使用 sigmoid 还是 relu 作为输出层的激活。 ma​​emse 作为 损失函数

例如,我使用 resnet50 作为主干,ma​​e 作为损失函数,sigmoid 是输出层的激活函数。 SGD 作为优化器。训练损失为:

Epoch 1 training loss is 0.4900, val_loss is 0.4797

Epoch 2 training loss is 0.4923, val_loss is 0.4794

Epoch 3 training loss is 0.4923, val_loss is 0.4783

...

Epoch 35 training loss is 0.4923, val_loss is 0.4771

训练损失不会改变,它是常数 0.4923。 val_loss 始终约为 0.47。我测试了不同的优化器学习率。网络还没有收敛。

当我使用 VGG16Mobilenet 作为骨干网时,网络融合了。 谁能给我一些关于如何解决这个问题的建议。

【问题讨论】:

  • 首先将损失函数改为二元交叉熵而不是mae。我想你的输出是概率,如果可能的话,你能告诉我们它们在现实中代表什么吗?我认为它们是图像中出现事件的概率。

标签: deep-learning resnet vgg-net


【解决方案1】:

您能否以某种方式验证 Resnet50 主干是否正确实施。也许尝试在 MNIST 上对其进行训练,看看它是否普遍有效。

在我看来,ResNet 变体只是输出一些平均值,而不是学习实际问题。

您能否提供更多关于您想要实现的目标的信息。你的回归是什么样子的,以及骨干网的预期输入是什么。此外,您可能想看看类似的工作(如果存在)并阅读他们使用的架构和超参数。

【讨论】:

  • resnet50 在 keras 中是预定义的。所以我认为它是正确实现的。
  • 我输入一张图片,网络的输出是一个点的坐标。例如坐标 x 和 y。 x 和 y 都重新调整为 0-1。例如,输入 img1.jpg 输出将是 point1(coor_x,coor_y)。实际上,输出有两个神经元。
  • @shc 你确定你用 VGG16 和 MobileNet 完成了这个任务吗,如果你用它们来完成这个任务,通常它们不会给你很好的结果
  • 前段时间我做了一些非常相似的事情。我使用了一些受 VGG 启发的架构。我记得我尝试了一些具有不同 LR、不同损失函数和激活的优化器。最后对我有用的唯一设置是 SGD 优化器、MSE 损失、所有层的 relu 激活,除了最后一个有 sigmoid 的层。您还可以尝试使用一个小子集(10 张图像或其他东西)进行训练,看看网络是否能够过拟合,以检查网络是否甚至能够学习并尝试从那里形成的东西。跨度>
  • @othmanmarfoq 是的,当我将输出的激活功能设置为“线性”时,resnet50 可以工作。谢谢
猜你喜欢
  • 2020-10-20
  • 2020-11-30
  • 2018-06-29
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2018-03-12
相关资源
最近更新 更多