【问题标题】:Loss Analysis of Deep Learning深度学习的损失分析
【发布时间】:2020-11-09 07:32:30
【问题描述】:

我是深度学习的新手,我已经建立了一个图卷积网络。我使用了 5 折交叉验证。在将平均 train_loss (blue)validate_loss (orange) 绘制在一起后,我得到了这个宝贝。

MSE loss

如您所见,从 validate_loss 的曲线趋势来看,我的网络似乎学到的东西很少。 (我猜是数据?GCN 框架?学习率?)

你们能具体帮我找出错误吗?

我将不胜感激!如果你不明白我的意思,请告诉我。

class Scorer(nn.Module):
    """
    Three conv_layers and two fc_layers with Dropout
    """
    def __init__(self):
        super(Scorer, self).__init__()
        self.conv_layer1 = GraphConvNet(5, 64)
        self.conv_layer2 = GraphConvNet(64, 128)
        self.conv_layer3 = GraphConvNet(128, 256) # (I have tried delete conv_layer3)
        self.fc_layer1 = nn.Linear(256, 128)
        self.drop_layer1 = nn.Dropout(0.5)
        self.fc_layer2 = nn.Linear(128, 64)
        self.drop_layer2 = nn.Dropout(0.5)
        self.out_layer = nn.Linear(64, 1)


    def forward(self, NormLap, feat):
        h = self.conv_layer1(NormLap, feat)
        h = F.leaky_relu(h)
        h = self.conv_layer2(NormLap, h)
        h = F.leaky_relu(h)
        h = self.conv_layer3(NormLap, h)
        h = F.leaky_relu(h)
        h = self.fc_layer1(h)
        h = self.drop_layer1(h)
        h = F.leaky_relu(h)
        h = self.fc_layer2(h)
        h = self.drop_layer2(h)
        h = F.leaky_relu(h)
        h = self.out_layer(h)
        h = F.leaky_relu(h)

以下是我的网络和参数:


    # parameter setting
    learning_rate = 0.001 # (I have tried 1e-1, 1e-2)
    weight_decay = 1e-3  # (I have tried 1e-4)
    epochs = 500
    batch_size = 50  # (I have tried 30)

    model = Scorer()
    loss_func = nn.MSELoss()
    optimizer = th.optim.Adam(model.parameters(), lr=learning_rate, weight_decay=weight_decay)

【问题讨论】:

    标签: parameters deep-learning pytorch data-loss


    【解决方案1】:

    这几乎就是训练和验证损失应该做的事情。损失随着时间的推移而下降;这就是优化器正在尝试做的事情。 train_loss 在 valid_loss 趋于平稳或稳定后继续下降,表明模型在 epoch ~100 左右后开始过度拟合。 MSE 0.3 对您的应用程序是好是坏完全取决于应用程序,但是是的,优化器优化得很好。

    请查看此资源以了解如何解释损失曲线:https://machinelearningmastery.com/learning-curves-for-diagnosing-machine-learning-model-performance/

    “从 validate_loss 的曲线趋势来看,我的网络似乎学到的东西很少” - 如果您解释(非常详细:)您为什么这么想,以获得更好的答案,这将有所帮助。除了你看到的,你还期待看到什么?我查看了同一张图,在我看来,您的网络正在学习对数据进行建模并预测您要预测的任何内容。

    【讨论】:

    • 感谢您的精彩回复。 “从 validate_loss 的曲线趋势来看,似乎我的网络学到的东西很少”(:我的意思是问题是 validate_loss 在早期急剧下降,并且在过度捕捞之后,validate_loss 应该比这种平滑状态增加更多(尽管我进行了平均操作)。通常情况下,validate_loss 应该以对数的形式减小并迅速增加?既然如此,嗯,您的意思是我的模型工作得很好吗?再次感谢您的网络链接分享。
    • 其实不是过拟合吗?
    • @santa 是的,过一段时间就过拟合了。这很正常——一些更强的正则化可能会有所帮助。
    • @santa 我认为您做了很多假设,如果您尝试对自己清楚地陈述它们,这将有助于您更清晰地思考。例如“验证损失永远不会停滞不前”:) 或“训练损失和验证损失将彼此接近” 首先,尝试一个具有已知性能的简单模型(MNIST 上的示例网络 - 尝试训练它的时间比例如,它会很快),查看损失曲线,并真正了解它们的行为方式。我对您的数据或 GraphConvNets 一无所知,但这些对我来说看起来像是完全正常的训练曲线。
    猜你喜欢
    • 2018-12-27
    • 2018-06-21
    • 2021-02-28
    • 1970-01-01
    • 2016-12-31
    • 2019-01-12
    • 2023-03-29
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多