相关网络的前向传递输出在没有反向传播的情况下发生变化
Forward pass output of a pertained network changes without back propagation
我正在使用 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网络)。那么为什么会这样呢?
如你所见VGG implementation,它具有dropout
功能。我认为这会导致随机性。
当你想在评估模式(而不是训练模式)中转发计算时,你可以将 chainer config 'train' 设置为 False
如下:
with chainer.no_backprop_mode(), chainer.using_config('train', False):
result = net(img,layers=['prob'])['prob']
当 train flag 为 False
时,不执行 dropout(并且其他一些函数行为也会发生变化,例如,BatchNormalization
使用经过训练的统计信息)。
我正在使用 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网络)。那么为什么会这样呢?
如你所见VGG implementation,它具有dropout
功能。我认为这会导致随机性。
当你想在评估模式(而不是训练模式)中转发计算时,你可以将 chainer config 'train' 设置为 False
如下:
with chainer.no_backprop_mode(), chainer.using_config('train', False):
result = net(img,layers=['prob'])['prob']
当 train flag 为 False
时,不执行 dropout(并且其他一些函数行为也会发生变化,例如,BatchNormalization
使用经过训练的统计信息)。