Вы можете использовать функцию РНН определенный here
Один из аргументов он принимает это sequence_length
sequence_length: Определяет длину каждой последовательности входов. Размер вектора int32 или int64 (тензор) [batch_size]. Значения в [0, T).
Вот как реализовать полный цикл
# x, state, sequence_length are placeholders
outputs, final_state = tf.nn.rnn(lstm_cell, x, state, sequence_length = sequence_lengths)
# add softmax layer, define loss, training method, etc
...
# code for one epoch
iterations = total_data_length/batch_size
max_sequence_length = max(all_possible_sequence_lengths)
cur_state = initial_state
for i in range(iterations):
# x is of dimension [max_sequence_length, batch_size, input_size]
# sequence_lengths is of dimension [batch_size]
x_data, sequence_data, y_data = mini_batch(batch_size)
feed_dict = {k: v for k, v in zip(x, x_data)}
feed_dict.append(sequence_lengths: sequence_data, ...)
outs, cur_state, _ = session.run([outputs, final_state, train], feed_dict)
Этот метод был немного запутанным мне за пару причин:
- Входная форма [sequence_length, batch_size, input_size] и не [batch_size, sequence_length, input_size]. Однако это имеет смысл, если вы переходите через код и видите, как реализуется rnn(). Это также означает, что вам необходимо изменить ваши выходы (имеющие размеры, такие же, как и входы), чтобы передать их в matmul, а затем softmax, например.
- Входы параметров в функции rnn() - список python. И вы не можете передать это в feed_dict как {x: x_data}, вы получите сообщение об ошибке «Невозможно использовать хэш-тип:« list »». Вместо этого посмотрите, как я использовал понимание в коде выше.
Это https://github.com/tensorflow/tensorflow/tree/master/tensorflow/models/rnn модель делает то, что вы хотите (для ranslation в данном случае) – Ashish
Привет Ashish, Я попытался пройти через этот код прежде чем задавать этот вопрос. Но я не мог точно понять, как это происходит? Не возражаете ли вы указывать на нужное место в коде. благодаря – akshaybetala