2016-10-21 2 views
4

При использовании dynamic_rnn требуется параметр initial_state. Легким решением являетсяКак установить начальное состояние rnn как параметр в тензорном потоке?

initial_state = lstm_cell.zero_state(batch_size, tf.float32) 

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

Я могу определить две обучаемые переменные, называемые h0 и c0, которые представляют собой два вектора. Но для dynamic_rnn требуются две матрицы, где первое измерение - batch_size. Как я могу расширить вектор h0 до матрицы, каждая строка которой h0?

ответ

3

Что делать, если вы сделали что-то подобное?

initial_state_vector = tf.get_variable('initial_state_vector', [1, state_size]) 
initial_state = tf.tile(initial_state_vector, batch_size) 

Затем вы можете поставить переменную initial_state в LSTM и это будет правильный размер.

+0

Мне не ясно, из документации, что 'tf.tile' связывает все значения, связанные друг с другом (чтобы убедиться, что вы только узнаете' state_size' множество значений, а не 'batch_size * state_size' много значений). Вы знаете, если это так? – kbrose

+1

Да. Когда вы рисуете вектор, тогда он свяжет все эти веса вместе. Я не тестировал код в своем ответе, поэтому у меня могло быть что-то немного, но эта основная стратегия должна работать. – Aaron

+0

На самом деле, это должно быть initial_state = tf.tile(initial_state_vector, [batch_size, 1]). Второй параметр tf.tile должен быть списком или тензором, в котором каждый элемент разбивает каждый размер начального_стате_вектора. –