Похоже, что последние изменения в API-интерфейсе tenorflow делают его похожим на keras, а также новые учебные пособия, ориентированные на решения, подобные keras.
Если вам нужен LSTM со стековым потоком «старого стиля», вы можете использовать tf.nn.rnn_cell.MultiRNNCell
(теперь он устарел и заменен на tf.keras.layers.StackedRNNCells
):
import tensorflow as tf
import tensorflow.contrib
from tensorflow.nn import dynamic_rnn
input_data = tf.placeholder(tf.float32, [batch_size, time_steps, num_features])
label_data = tf.placeholder(tf.float32, [batch_size, time_steps, num_labels])
# dense layer is broadcasted automatically to time-distributed data
dense_data = tf.layers.dense(input_data, 128, activation='relu')
with tf.variable_scope('lstm') as scope:
lstm1 = tensorflow.nn.rnn_cell.LSTMCell(256, state_is_tuple=True)
lstm2 = tensorflow.nn.rnn_cell.LSTMCell(256, state_is_tuple=True)
lstm3 = tensorflow.nn.rnn_cell.LSTMCell(256, state_is_tuple=True)
# or even more layers
# group them into one cell
multi_cell = tensorflow.nn.rnn_cell.MultiRNNCell(cells=[lstm1, lstm2, lstm3], state_is_tuple=True)
rnn_result, _ = tf.nn.dynamic_rnn(multi_cell, dense_data, dtype=tf.float32)
td_data_1 = tf.layers.dense(rnn_result, 128, activation='linear')
td_data_2 = tf.layers.dense(rnn_result, 12, activation='linear')
Теперь вы должны определить некоторую потерю, но не ясно, какую потерю вы планируете использовать, поэтому я пропускаю эту часть (в зависимости от некоторых характеристик это может быть sigmoid_cross_entropy_with_logits
(в конце концов, это не выполнимый пример, но я могу предоставить один для некоторого стандартного набора данных, такого как MNIST или около того, если вам нужно):
loss = tf.nn...
train_op = tf.train.AdamOptimizer(1e-4).minimize(loss)
init_op = tf.initialize_all_variables()
Инициализация и обучение (упрощенно):
sess = tf.Session()
sess.run(init_op)
for i in range(len(x_tr) // batch_size):
sess.run(
train_op,
feed_dict={
input_data: x_tr[i*batch_size:i*batch_size+batch_size],
output_data: y_tr_cat[i*batch_size:i*batch_size+batch_size],
}
)
Заметьте, пожалуйста, если вам не нужны стековые слои с тензорным потоком и требуется какое-то решение для версии 2.0.