【问题标题】:Randomness in VGG16 predictionVGG16 预测中的随机性
【发布时间】:2019-10-22 07:23:13
【问题描述】:

我正在使用 pytorch 中可用的 VGG-16 网络来预测一些图像索引。我发现对于同一个输入文件,如果我多次预测,我会得到不同的结果。这对我来说似乎违反直觉。一旦预测了权重(因为我使用的是预训练模型),任何步骤都不应该有任何随机性,因此使用相同输入文件的多次运行将返回相同的预测。

这是我的代码:

import torch
import torchvision.models as models
VGG16 = models.vgg16(pretrained=True)
def VGG16_predict(img_path):
  transformer = transforms.Compose([transforms.CenterCrop(224),transforms.ToTensor()])
  data = transformer(Image.open(img_path))
  output = softmax(VGG16(data.unsqueeze(0)), dim=1).argmax().item()
  return output # predicted class index
VGG16_predict(image) 

这是图片

【问题讨论】:

    标签: deep-learning conv-neural-network pytorch vgg-net


    【解决方案1】:

    回想一下,许多模块有两种用于训练和评估的状态:“一些模型使用具有不同训练和评估行为的模块,例如批量标准化。要在这些模式之间切换,请使用 model.train() 或 model.eval( ) 视情况而定。有关详细信息,请参阅 train() 或 eval()。 (https://pytorch.org/docs/stable/torchvision/models.html)

    在这种情况下,分类器层包括 dropout,它在训练期间是随机的。如果您希望评估是非随机的,请运行 VGG16.eval()

    【讨论】:

    • 令人惊讶的是,eval 模式下的模型对其预测的确定性远低于 train 模型,从 90%+ 下降到 80%-。
    猜你喜欢
    • 1970-01-01
    • 2018-03-24
    • 2014-08-07
    • 2019-01-28
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多