我正在研究RNN控制器,它将工厂的当前状态作为RNN的输入,并生成输出作为控制信号.在执行控制之后,更新的工厂状态被反馈给RNN作为下一时间步的输入.在此循环中,输入序列逐步堆叠,而不是预先给出所有.目前,不涉及任何培训.只需要单步前向模拟.因此,我正在寻找可以执行此一步RNN输出的张量流RNN操作.
input_data = tf.placeholder(tf.float32, [batch_size, len_seq,8])
Run Code Online (Sandbox Code Playgroud)
我定义了两种输入的: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)
Run Code Online (Sandbox Code Playgroud)
网络以两种方式读出: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)
Run Code Online (Sandbox Code Playgroud)
您只需调用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)
Run Code Online (Sandbox Code Playgroud)
如果您有充分的理由不使用,请查看文档以RNNCell.__call__()获取有关形状input_single和state_single应该是什么的更多详细信息cell.zero_state().
| 归档时间: |
|
| 查看次数: |
1087 次 |
| 最近记录: |