【问题标题】:Model.train() with pre-trained weights makes results all 0 while model.eval() is fine具有预训练权重的 Model.train() 使结果全部为 0,而 model.eval() 很好
【发布时间】:2021-08-30 00:40:00
【问题描述】:

感谢您对此事的关注。

我想继续使用预先训练的权重训练模型。当我用model.eval()评估这个预训练模型时,一切都很好,模型会产生一些合理的结果,但是当我想进一步训练这个模型并用model.train()设置模式时,就会出现问题。在前向循环期间,model.train() 语句 (batchsize = 1) 之后所有生成的结果都将为零。

关于为什么会发生这种情况的任何想法?

非常感谢。

【问题讨论】:

    标签: python pytorch batch-normalization


    【解决方案1】:

    Batch normalization 的工作原理是根据 batch 的估计均值和方差对所有激活进行归一化。
    batchsize=1 时,您希望这些值是多少?

    增加你的batchsize,看看是否出现问题。

    【讨论】:

    • 感谢您的回复。我试过 bs=2 但结果仍然全为零。我认为这个问题一定与编码器中的batchnorm层有关,但是batchsize = 1不会使分割掩码字面上全为0,即使它会降低结果,我现在在想这是否是因为作者在原始实现中使用了nn.Parallel ,这可能会导致这种效果。
    猜你喜欢
    • 2020-01-12
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 2018-03-26
    • 2019-09-20
    • 2016-03-14
    • 2020-11-09
    相关资源
    最近更新 更多