我正在使用来自torch.vision模块的预训练vgg-19我对图像数据进行了如下预处理:
normalize = transforms.Normalize(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]
)
preprocess = transforms.Compose([
transforms.Scale(224),
transforms.ToTensor(),
normalize
])
问题是,如果我通过网络传递一个像网球一样的图像,并保存最终 FC 层的所有 1000 个班级分数,并在一段时间后再次传递相同的图像,则最终的 FC 层,即班级分数略有变化。尽管网络检测到的图像类别是正确的。(这是一个网球(
同一图像的班级分数略有不同是否正常?我的意思是,这应该发生吗?或者对于正确实现的预训练模型,网络应该每次对同一图像给出完全相同的类分数。
班级分数可能不同的可能原因:
- 您正在使用 GPU:GPU 评估略微随机,因此如果您在前馈评估中使用 GPU,它可能会给出略有不同的分数。
- 你在训练模式下使用模型
model.train()
并且没有使用model.eval()
激活评估模式,并且你的模型包含一些随机部分,如辍学或向输入添加噪声。 然后这些随机部分仍将处于活动状态。