2016-08-01 8 views
1

Я пытаюсь реализовать нейронную сеть LSTM, используя тензорный поток для определения ключевых слов. Я питал нейронную сеть последовательностями 400 мс. Однако во время обучения я не хочу, чтобы LSTM запоминал последовательность 1, пытаясь, например, изучить последовательность 6. Итак, как я могу сбросить состояние LSTM во время тренировки. Имеет ли initial_state в аргументе outputs, state = rnn.rnn(cell, inputs, initial_state=self._initial_state) возможность сброса памяти LSTM после подачи всей партии?Когда состояние LSTM сбрасывается

Я пытался понять реализацию с этой ссылке:

https://github.com/tensorflow/models/blob/master/tutorials/rnn/ptb/ptb_word_lm.py

+0

Я не уверен, что понимаю вашу цель, но вы можете сбросить состояние при запуске сети. Скажем, 'network = tf.rnn.rnn_cell.MultiRNNCell (...)', а затем запуск 'network (input, current_state)' создает выход и новое состояние. Вы можете проигнорировать это новое состояние и снова ввести «current_state», например. –

+0

Да, извините, может быть, я не был достаточно ясен. Когда я тренировал сеть LSTM, я подал ей список ([batch_size, 39_MFCC]) длины n_timesteps. Я хотел бы знать, если состояние будет сбрасываться каждые n_timesteps если я реализовал: 'multi_lstm = rnn_cell.MultiRNNCell ([lstm_cell] * config.num_layers) = входной параметр init_state multi_lstm.zero_state (batch_size, tf.float32) выходы, состояния = rnn.rnn (multi_lstm, tmp, dtype = tf.float32, initial_state = init_state) ' – Chris

+0

Нет причины для сброса состояния, если вы не сделаете это явно. Я не вижу в вашем коде 'n_timesteps' --- вы бы указали на усеченное обратное распространение? –

ответ

1

В ptb_word_lm.pyself._initial_state устанавливается только один раз во всей программе:

self._initial_state = cell.zero_state(batch_size, data_type()) 

Это означает, что она остается постоянной нулевой вектор. Таким образом, начальное состояние для разматывания LSTM всегда равно нулю. Вам не нужно явно перезагружать память после подачи партии.

Если вы хотите вручную обновить состояние LSTM/self._initial_state, вам необходимо определить его как переменную вместо тензора. См. Ответы here для получения дополнительной информации.

+0

Если бы это было так, не означает ли это, что передача пакета дважды через lstm (обучение wihout) даст такой же результат? – npit

+1

@npit Для безстоящих LSTM, да. –