Я хочу тренировать модель LSTM с Tensorflow. У меня есть текстовые данные в качестве входных данных, и я получаю doc2vec каждого абзаца текста и передаю его слоям lstm, но я получаю ValueError из-за несогласованности ранга формы.
Я искал в Stackoverflow похожие вопросы и некоторые учебные пособия, но не смог решить эту ошибку. Ты хоть представляешь, что мне делать?
Вот ошибка:
Traceback (последний вызов был последним):
Файл "writeRNN.py", строка 97, в
выходные данные, final_state = tf.nn.dynamic_rnn (ячейка, embed, initial_state = initial_state)
Файл "myven / lib / python3.5 / site-packages / tenorflow / python / ops / rnn.py", строка 627, в dynamic_rnn
DTYPE = DTYPE)
Файл "myven / lib / python3.5 / site-packages / tenorflow / python / ops / rnn.py", строка 690, в _dynamic_rnn_loop
для input_ in flat_input)
Файл "myven / lib / python3.5 / site-packages / tenorflow / python / ops / rnn.py", строка 690, в
для input_ in flat_input)
Файл "myven / lib / python3.5 / site-packages / tenorflow / python / framework / tenor_shape.py", строка 761, в with_rank_at_least
повысить ValueError («Shape% s должен иметь ранг не менее% d»% (self, rank))
ValueError: Shape (?,?) Должен иметь ранг не менее 3
И ниже код:
lstm_size = 128
lstm_layers = 1
batch_size = 50
learning_rate = 0.001
# Create the graph object
graph = tf.Graph()
# Add nodes to the graph
with graph.as_default():
inputs_ = tf.placeholder(tf.int32, [None, None], name='inputs')
labels_ = tf.placeholder(tf.int32, [None, None], name='labels')
keep_prob = tf.placeholder(tf.float32, name='keep_prob')
with graph.as_default():
lstm = tf.contrib.rnn.BasicLSTMCell(lstm_size)
drop = tf.contrib.rnn.DropoutWrapper(lstm, output_keep_prob=keep_prob)
cell = tf.contrib.rnn.MultiRNNCell([drop] * lstm_layers)
initial_state = cell.zero_state(batch_size, tf.float32)
with graph.as_default():
outputs, final_state = tf.nn.dynamic_rnn(cell, inputs_, initial_state=initial_state)
with graph.as_default():
predictions = tf.contrib.layers.fully_connected(outputs[:, -1], 1, activation_fn=tf.sigmoid)
cost = tf.losses.mean_squared_error(labels_, predictions)
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)
with graph.as_default():
correct_pred = tf.equal(tf.cast(tf.round(predictions), tf.int32), labels_)
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
with tf.Session(graph=graph) as sess:
sess.run(tf.global_variables_initializer())
for e in range(epochs):
state = sess.run(initial_state)
for ii, (x, y) in enumerate(get_batches(train_x, train_y, batch_size), 1):
feed = {inputs_: x, labels_: y[:, None], keep_prob: 0.5, initial_state: state}
loss, state, _ = sess.run([cost, final_state, optimizer], feed_dict=feed)
Я получил ошибку на выходах, final_state = tf.nn.dynamic_rnn (ячейка, input_, initial_state = initial_state) Строка как ошибка, которую я описал.
Модель doc2vec обучается на gensim и преобразует каждое предложение в вектор со значением 100.
Я пытался изменить input_ shape и label_ shape, но также получаю ту же ошибку!
Я действительно не знаю, что мне делать?!
Я очень благодарен, если вы ответите на мой вопрос.