Tôi đang cố gắng hiểu các mô hình seq2seq được xác định trong seq2seq.py trong tensorflow. Tôi sử dụng bit mã tôi sao chép từ ví dụ translate.py đi kèm với tensorflow. Tôi tiếp tục nhận được cùng một lỗi và thực sự không hiểu nó đến từ đâu.Lỗi khi xây dựng mô hình seq2seq với tensorflow
Một ví dụ mã tối thiểu để sao chép các lỗi:
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))
Các lỗi tôi nhận được khi đánh giá dòng cuối cùng (tôi đánh giá nó tương tác trong dịch viên 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]]
Tôi nghi ngờ lỗi đến từ phía tôi :) Trên một sidenote. Các tài liệu hướng dẫn và các hướng dẫn thực sự tuyệt vời nhưng mã ví dụ cho trình tự để mô hình trình tự (ví dụ dịch tiếng Anh sang tiếng Pháp) là khá dày đặc. Bạn cũng phải nhảy rất nhiều giữa các tập tin để hiểu những gì đang xảy ra. Tôi ít nhất đã bị mất nhiều lần trong mã.
Một ví dụ tối thiểu (có lẽ trên một số dữ liệu đồ chơi) về xây dựng và đào tạo mô hình seq2seq cơ bản sẽ thực sự hữu ích ở đây. Ai đó biết nếu điều này đã tồn tại ở đâu đó?
EDIT Tôi đã sửa mã ở trên theo gợi ý @Ishamael (nghĩa là không trả về lỗi) (xem bên dưới), nhưng vẫn còn một số điều không rõ ràng trong phiên bản cố định này. Đầu vào của tôi là một chuỗi các vectơ có chiều dài 2 giá trị thực có giá trị. Và đầu ra của tôi là một chuỗi các vectơ nhị phân có độ dài 22. Mã nguồn tf.placeholder của tôi có trông giống như sau không? (EDIT có)
tf.placeholder(tf.float32, shape=[None,2],name="encoder{0}".format(i))
tf.placeholder(tf.float32, shape=[None,22],name="encoder{0}".format(i))
Tôi cũng đã phải thay đổi tf.int32 để tf.float32 trên. Vì đầu ra của tôi là nhị phân. Nếu điều này không phải là tf.int32 cho tf.placeholder của bộ giải mã của tôi thì sao? Nhưng tensorflow lại phàn nàn nếu tôi làm điều này. Tôi không chắc lý do đằng sau chuyện này là gì.
Kích thước lớp ẩn của tôi là 512 tại đây.
mã cố định hoàn chỉnh
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))
Tôi đang cố gắng tìm hiểu seq2seq trong tf ngay bây giờ. Là 350 kích thước vocab của bộ mã hóa của bạn và 45 kích thước vocab của bộ giải mã của bạn? – Soubriquet