张量流RNN中的单步模拟

时间:2016-12-13 14:19:43

标签: python tensorflow

我正在研究RNN控制器,它将工厂的当前状态作为RNN的输入,并生成输出作为控制信号。在执行控制之后,更新的工厂状态被反馈给RNN作为下一时间步的输入。在此循环中,输入序列逐步堆叠,而不是预先给出所有。 目前,不涉及任何培训。只需要单步前向模拟。 因此,我正在寻找可以执行此一步RNN输出的张量流RNN操作。

input_data = tf.placeholder(tf.float32, [batch_size, len_seq,8])

我为Input_data输入序列定义了两种输入:batch_size,以及当前时间步输入的input_single

input_single = tf.placeholder(tf.float32, [1, 1, 8])
action_gradient = tf.placeholder(tf.float32, [batch_size, len_seq, dimAction])
num_hidden = 24    
cell = tf.nn.rnn_cell.LSTMCell(num_hidden, state_is_tuple=True)
state_single = cell.zero_state(batch_size, tf.float32)
(output_single, state_single) = cell(input_single, state_single)
weight = tf.Variable(tf.truncated_normal([num_hidden, dimAction]))
bias = tf.Variable(tf.constant(0.1, shape=[dimAction]))
y_single = tf.nn.tanh(tf.matmul(output_single, weight) + bias)

网络以两种方式读出:每个时间步y_single,输入的整个小批量y_seq

outputs, states = tf.nn.dynamic_rnn(cell, input_data, dtype=tf.float32)
y_seq = tf.nn.tanh(tf.matmul(outputs, weight) + bias)

1 个答案:

答案 0 :(得分:7)

您只需拨打一次tf.rnn.LSTMCell对象即可实现此目的。确保你输入正确的参数。这样的事情会对你有帮助,

cell = tf.nn.rnn_cell.LSTMCell(num_hidden, state_is_tuple=True)
input_single = tf.ones([batch_size, input_size])
state_single = cell.zero_state(batch_size, tf.float32)
(output_single, state_single) = cell(input_single, state_single)

如果您有充分的理由不使用{{1},请查看RNNCell.__call__()的文档,了解input_singlestate_single的形状应该是什么的详细信息。 }。