2016-06-26 2 views
4

Я хочу построить модель seq2seq с помощью focus_decoder и использовать MultiRNNCell с LSTMCell в качестве кодировщика. Поскольку код TensorFlow предполагает, что «это поведение по умолчанию (state_is_tuple = False) скоро будет устаревшим». Я устанавливаю state_is_tuple = True для кодировщика.TensorFlow attention_decoder с RNNCell (state_is_tuple = True)

Проблема заключается в том, что, когда я прохожу состояние кодера attention_decoder, он сообщает об ошибке:

*** AttributeError: 'LSTMStateTuple' object has no attribute 'get_shape' 

Эта проблема, кажется, связана с функцией внимания() в seq2seq.py и _linear() в rnn_cell.py, в которой код вызывает функцию get_shape() 'объекта LSTMStateTuple из начального_стата, сгенерированного кодером.

Хотя, когда я установил state_is_tuple = False для датчика ошибка исчезает, программа выдает следующее предупреждение:

WARNING:tensorflow:<tensorflow.python.ops.rnn_cell.LSTMCell object at 0x11763dc50>: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True. 

Я бы очень признателен, если кто-то может дать никаких указаний о построении seq2seq с RNNCell (state_is_tuple = Правда).

ответ

0

Я столкнулся с этой проблемой также, состояния lstm должны быть объединены, иначе _linear будет жаловаться. Форма LSTMStateTuple зависит от типа ячейки, которую вы используете. С LSTM клетки можно сцепить состояния, как это:

query = tf.concat(1,[state[0], state[1]]) 

Если вы используете MultiRNNCell, сцепить состояния для каждого слоя первого:

concat_layers = [tf.concat(1,[c,h]) for c,h in state] 
query = tf.concat(1, concat_layers) 
Смежные вопросы