【发布时间】:2016-12-14 14:16:20
【问题描述】:
我正在研究一个 RNN 控制器,它将工厂的当前状态作为 RNN 的输入,并生成输出作为控制信号。执行控制后,更新后的工厂状态作为下一个时间步的输入反馈给 RNN。在这个循环中,输入序列是一步一步堆叠的,而不是预先给定的。 目前,不涉及任何培训。只需要单步前向模拟。 所以我要找一个可以做这个一步RNN输出的tensorflow 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 用于输入的整个 minibatch。
outputs, states = tf.nn.dynamic_rnn(cell, input_data, dtype=tf.float32)
y_seq = tf.nn.tanh(tf.matmul(outputs, weight) + bias)
【问题讨论】:
-
是的,我的代码有问题。插入了一些行。我试图将输入变量设为一步输入。使用“input_single”时,会出现 TypeError: 'Variable' object is not iterable。
-
您需要提供更多代码,
input_single是如何定义的?另外,为什么不使用cell.zero_state(1,tf.float32)代替state_single? -
@martianwars 输入单被定义为占位符,形状为
[1, 1, input_size]。我没有使用cell.zero_state(1,tf.float32)进行state_single初始化的原因再次是担心状态不是序列,而是只有一个时间步长。 -
zero_state不返回序列,它返回大小为[batch size x state size]的单个state -
它返回一个
batch_size状态数,指定batch_size序列数的每个初始状态?
标签: python tensorflow