VGG16预测中的随机性

时间:2019-06-06 18:33:23

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

我使用开箱即用的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) 

这是图片

1 个答案:

答案 0 :(得分:3)

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

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