我正在使用Chainer的相关模型vgg(此处称为net)。每次运行以下代码,都会得到不同的结果:
img = Image.open("/Users/macintosh/Desktop/Code/Ger.jpg")
img = Variable(vgg.prepare(img))
img = img.reshape((1,) + img.shape)
print(net(img,layers=['prob'])['prob'])
我已经多次检查vgg.prepare(),但是其输出是相同的,并且这里没有随机初始化(net是预训练的vgg网络)。那为什么会这样呢?
答案 0 :(得分:1)
如您所见VGG implementation,它具有dropout
功能。我认为这会导致随机性。
要在评估模式(而不是训练模式)下转发计算时,可以将链接器 config'train'设置为False
,如下所示:
with chainer.no_backprop_mode(), chainer.using_config('train', False):
result = net(img,layers=['prob'])['prob']
当训练标志为False
时,不执行辍学操作(某些其他功能行为也会发生变化,例如BatchNormalization
使用训练有素的统计信息)。