Керас вперед пас с выпадением
Я пытаюсь использовать dropout, чтобы получить оценки ошибок для нейронной сети.
Это включает в себя запуск нескольких проходов моей сети после тренировки с активированным выпадением. Однако, похоже, что Dropout не активируется при вызове model.predict(). Можно ли это сделать в Керасе или я должен взять свои веса в другом месте?
2 ответа
Стохастические прямые проходы (которые используют выпадение во время тестирования) могут быть реализованы с использованием функции keras backend. Предполагая, что у вас есть обученная нейронная сеть под названием model
:
from keras import backend as K
nb_MC_samples = 100
MC_output = K.function([model.layers[0].input, K.learning_phase()], [model.layers[-1].output])
learning_phase = True # use dropout at test time
MC_samples = [MC_output([x_test, learning_phase])[0] for _ in xrange(nb_MC_samples)]
MC_samples = np.array(MC_samples) # [#samples x batch size x #classes]
Для полной реализации см. Следующую записную книжку ipython.
Это уже сделано в Керасе, см., Например, это обсуждение на странице проекта. Больше о том, как это работает, можно найти, например, в CS231n: Сверточные нейронные сети для визуального распознавания - AFAIK, очень похожая реализация в Keras. В частности:
(...) Важно отметить, что в функции прогнозирования мы больше не отбрасываем, а выполняем масштабирование обоих выходов скрытого слоя на стр. Это важно, потому что во время тестирования все нейроны видят все свои входные данные, поэтому мы хотим выходы нейронов во время тестирования должны быть идентичны их ожидаемым выходам во время обучения.