Я пытаюсь понять модели seq2seq, определенные в seq2seq.py в тензорном потоке. Я использую биты кода, который я копирую из примера translate.py, который поставляется с тензорным потоком. Я продолжаю получать ту же ошибку и действительно не понимаю, откуда она взялась.Ошибка при построении модели seq2seq с тензорным потоком
Минимальный пример кода для воспроизведения ошибки:
import tensorflow as tf
from tensorflow.models.rnn import rnn_cell
from tensorflow.models.rnn import seq2seq
encoder_inputs = []
decoder_inputs = []
for i in xrange(350):
encoder_inputs.append(tf.placeholder(tf.int32, shape=[None],
name="encoder{0}".format(i)))
for i in xrange(45):
decoder_inputs.append(tf.placeholder(tf.int32, shape=[None],
name="decoder{0}".format(i)))
model = seq2seq.basic_rnn_seq2seq(encoder_inputs,
decoder_inputs,rnn_cell.BasicLSTMCell(512))
Я получаю ошибку при оценке последней строки (я оценил его в интерактивном режиме интерпретатора Python):
>>> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/tmp/py1053173el", line 12, in <module>
File "/usr/local/lib/python2.7/dist-packages/tensorflow/models/rnn/seq2seq.py", line 82, in basic_rnn_seq2seq
_, enc_states = rnn.rnn(cell, encoder_inputs, dtype=dtype)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/models/rnn/rnn.py", line 85, in rnn
output_state = cell(input_, state)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/models/rnn/rnn_cell.py", line 161, in __call__
concat = linear.linear([inputs, h], 4 * self._num_units, True)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/models/rnn/linear.py", line 32, in linear
raise ValueError("Linear is expecting 2D arguments: %s" % str(shapes))
ValueError: Linear is expecting 2D arguments: [[None], [None, 512]]
Я подозреваю, ошибка приходит с моей стороны :) На стороне. Документация и учебники действительно велики, но примерный код последовательности для последовательности (пример перевода с английского на французский) довольно плотный. Вы также должны много прыгать между файлами, чтобы понять, что происходит. Я, по крайней мере, несколько раз терялся в коде.
Примером может служить минимальный пример (возможно, по некоторым данным о игруше) построения и обучения базовой модели seq2seq. Кто-нибудь знает, что это уже существует?
EDIT Я установил код, указанный выше в соответствии предложения @Ishamael (значение, без ошибок возвращается) (смотри ниже), но есть еще некоторые вещи, не ясно, в этой фиксированной версии. Мой вход представляет собой последовательность векторов длины 2 вещественных значений. И мой вывод представляет собой последовательность двоичных векторов длиной 22. Должен ли мой код tf.placeholder выглядеть не следующим образом? (EDIT да)
tf.placeholder(tf.float32, shape=[None,2],name="encoder{0}".format(i))
tf.placeholder(tf.float32, shape=[None,22],name="encoder{0}".format(i))
Я также должен был изменить tf.int32 к tf.float32 выше. Поскольку мой вывод двоичный. Должно ли это не быть tf.int32 для tf.placeholder моего декодера? Но тензорный поток снова жалуется, если я это сделаю. Я не знаю, что за этим стоит.
Размер моего скрытого слоя - 512 здесь.
полный фиксированный код
import tensorflow as tf
from tensorflow.models.rnn import rnn_cell
from tensorflow.models.rnn import seq2seq
encoder_inputs = []
decoder_inputs = []
for i in xrange(350):
encoder_inputs.append(tf.placeholder(tf.float32, shape=[None,512],
name="encoder{0}".format(i)))
for i in xrange(45):
decoder_inputs.append(tf.placeholder(tf.float32, shape=[None,512],
name="decoder{0}".format(i)))
model = seq2seq.basic_rnn_seq2seq(encoder_inputs,
decoder_inputs,rnn_cell.BasicLSTMCell(512))
Я пытаюсь научиться seq2seq в ТФ прямо сейчас. Является ли 350 размером вокала вашего кодировщика и 45 размером слова вашего декодера? – Soubriquet