相关网络的前向输出更改无需反向传播

时间:2018-11-15 17:09:12

标签: python neural-network pre-trained-model chainer vgg-net

我正在使用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网络)。那为什么会这样呢?

1 个答案:

答案 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使用训练有素的统计信息)。