2

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

4

1 回答 1

1

正如你所看到的VGG 实现,它具有dropout功能。我认为这会导致随机性。

当您想在评估模式(而不是训练模式)下转发计算时,您可以将 chainer config 'train' 设置False为如下:

with chainer.no_backprop_mode(), chainer.using_config('train', False):
    result = net(img,layers=['prob'])['prob']

当 train 标志为 时False,不执行 dropout(并且一些其他功能行为也会发生变化,例如,BatchNormalization使用经过训练的统计信息)。

于 2018-11-16T04:12:57.360 回答