Что означает часть этого синтаксиса, определяющая уровень LSTM (в TF1)? - PullRequest
0 голосов
/ 21 июня 2020

Итак, я слежу за блогом Артура Джулианиса, и у меня возникли сомнения относительно c уровня LSTM, который он определил в своей реализации кода A3 C. ( Его код ) ( Его блог ) Мои сомнения:

1) Почему здесь используется self.state_init?

2) Не используются начальные состояния lstm, определенные state_in, а не state_init , так почему state_init?

3) Я ошибаюсь, потому что, возможно, self.init будет использоваться позже в коде?

4) Что обозначают lstm_ c и lstm_h в lstm_state вывод? (Я угадываю окончательное скрытое состояние и ..?)

lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(256,state_is_tuple=True)
c_init = np.zeros((1, lstm_cell.state_size.c), np.float32)
h_init = np.zeros((1, lstm_cell.state_size.h), np.float32)
self.state_init = [c_init, h_init]

c_in = tf.placeholder(tf.float32, [1, lstm_cell.state_size.c])
h_in = tf.placeholder(tf.float32, [1, lstm_cell.state_size.h])
self.state_in = (c_in, h_in)

rnn_in = tf.expand_dims(hidden, [0])
step_size = tf.shape(self.imageIn)[:1]
state_in = tf.nn.rnn_cell.LSTMStateTuple(c_in, h_in)
lstm_outputs, lstm_state = tf.nn.dynamic_rnn(
                lstm_cell, rnn_in, initial_state=state_in, sequence_length=step_size,
                time_major=False)

lstm_c, lstm_h = lstm_state
self.state_out = (lstm_c[:1, :], lstm_h[:1, :])
rnn_out = tf.reshape(lstm_outputs, [-1, 256])
...