Передача прямого прохода для соответствующей сети изменяется без обратного распространения - PullRequest
0 голосов
/ 15 ноября 2018

Я использую принадлежащую 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 голосов
/ 16 ноября 2018

Как видите, реализация VGG , она имеет функцию dropout.Я думаю, что это приводит к случайности.

Когда вы хотите перенаправить вычисления в режиме оценки (вместо режима обучения), вы можете установить цепочку config 'train' на False следующим образом:

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

, когда флаг поезда равен False, выпадение не выполняется (и некоторые другие функции поведения также изменяются, например, BatchNormalization использует обученную статистику).

...