首页 文章

张量流RNN中的单步模拟

提问于
浏览
5

我正在研究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 回答

  • 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)
    

    如果您有充分的理由不使用 cell.zero_state() ,请查看RNNCell.call()的文档,了解 input_singlestate_single 应该是什么形状的更多详细信息 .

相关问题