Как использовать MC Dropout для вариационного слоя LSTM на кератах? - PullRequest
0 голосов
/ 22 января 2019

В настоящее время я пытаюсь настроить (LSTM) рекуррентную нейронную сеть с Keras (бэкэнд тензор потока). Я хотел бы использовать вариационный отсев с MC Dropout на нем. Я полагаю, что вариационное отбрасывание уже реализовано с опцией "recurrent_dropout" уровня LSTM, но я не нахожу никакого способа установить флаг "обучения", чтобы установить значение true, как классический слой Dropout.

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Исходный код «Отброс как байесовское приближение: представление неопределенности модели в глубоком обучении» (2015) расположен по адресу https://github.com/yaringal/DropoutUncertaintyExps/blob/master/net/net.py.. Они также используют Keras, и код довольно прост для понимания.Слои Dropout используются без API Sequential , чтобы передать параметр обучения.Это другой подход к предложению от Матиаса:

inter = Dropout(dropout_rate)(inter, training=True)
0 голосов
/ 22 января 2019

Это довольно просто в Keras, сначала вам нужно определить функцию, которая принимает как ввод модели, так и learning_phase:

import keras.backend as K
f = K.function([model.layers[0].input, K.learning_phase()],
               [model.layers[-1].output])

Для модели функционального API с несколькими входами / выходами вы можете использовать:

f = K.function([model.inputs, K.learning_phase()],
               [model.outputs])

Затем вы можете вызвать эту функцию наподобие f([input, 1]), и это скажет Keras включить фазу обучения во время этого вызова, выполнив Dropout.Затем вы можете вызывать эту функцию несколько раз и комбинировать прогнозы для оценки неопределенности.

...