我正在研究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)
答案 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_single
和state_single
的形状应该是什么的详细信息。 }。