Реализация Tensorflow LSTM Dropout

  • Как конкретно тензорный поток применяет dropout при вызове tf.nn.rnn_cell.DropoutWrapper ()?

Все, что я читал о применении отсева к ссылкам rnn в этой статье Zaremba et. al, в котором говорится, что не применяйте прерывание между повторяющимися подключениями. Нейроны следует отбрасывать случайным образом до или после слоев LSTM, но не между слоями LSTM. Ok.

  • У меня вопрос: как нейроны отключаются относительно времени?

В статье, которую все цитируют, кажется, что на каждом временном шаге применяется случайная «маска отсева», вместо того, чтобы генерировать одну случайную «маску отсева» и повторно использовать ее, применяя ее ко всем временным шагам в данном выпадающем слое. Затем для следующего пакета создается новая «маска отсева».

Далее, и, вероятно, что сейчас важнее, как это делает тензорный поток? Я проверил tenorflow api и попытался найти подробное объяснение, но еще не нашел его.

  • Есть ли способ покопаться в фактическом исходном коде тензорного потока?

person beeCwright    schedule 27.02.2017    source источник
comment
Весь исходный код доступен на github   -  person user2717954    schedule 27.02.2017


Ответы (1)


Вы можете проверить реализацию здесь.

Он использует опцию выпадения на входе в RNNCell, затем на выходе с указанными вами вероятностями сохранения.

Кажется, что каждая последовательность, которую вы вводите, получает новую маску для ввода, а затем для вывода. Никаких изменений внутри последовательности.

person Robert Lacok    schedule 27.02.2017
comment
Спасибо. Это действительно привело меня к ответу, выпадение не применяется повторно при использовании его в rnn в тензорном потоке. Для всех, кому нужна эта функция, я открыл проблему на github, Issue # 7927. - person beeCwright; 01.03.2017