Tensorflow LSTM - Реализация отсева

Я следую примеру Tensorflow для LSTM (в папке Udacity) https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/udacity/6_lstm.ipynb и пытаюсь реализовать выпадение на ванильном LSTM.

Читая статью Зарембы, моя интерпретация отсева состоит только в добавлении одной строки dropped_i = tf.nn.dropout(i, 0.5) в lstm_cell.

  def lstm_cell(i, o, state):
    dropped_i =  tf.nn.dropout(i, 0.5) # <- here!
    input_gate = tf.sigmoid(tf.matmul(i, ix) + tf.matmul(o, im) + ib)
    forget_gate = tf.sigmoid(tf.matmul(i, fx) + tf.matmul(o, fm) + fb)
    update = tf.matmul(i, cx) + tf.matmul(o, cm) + cb 
    state = forget_gate * state + input_gate * tf.tanh(update) # to keep things between -1 and +1 
    output_gate = tf.sigmoid(tf.matmul(i, ox) + tf.matmul(o, om) + ob)
    return output_gate * tf.tanh(state), state

Мой вопрос

1) Реализация отсева это так просто? Просто добавить одну строку в ячейку LSTM? Я не уверен, что моя реализация верна.

2) Когда я применяю отсев на output_gate так же как input_gateзатем недоумение ухудшается. Насколько я понимаю, потому что выход снова становится входным, нам нужно только применить выпадение на input_gate, Пожалуйста, кричите на меня, если это не правильно.

Я искал GitHub, чтобы увидеть, как другие решили эту проблему, но у всех разное решение. Если бы кто-то мог дать мне подсказку или указать правильную реализацию, я был бы очень благодарен.

0 ответов

Другие вопросы по тегам