我正在研究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 回答
您只需调用一次
tf.rnn.LSTMCell
对象即可实现此目的 . 确保你输入正确的参数 . 这样的事情对你有帮助,如果您有充分的理由不使用
cell.zero_state()
,请查看RNNCell.call()的文档,了解input_single
和state_single
应该是什么形状的更多详细信息 .