我正在使用 TensorFlow 来实现 RNN。我这样创建循环单元:
gru_cell = tf.contrib.rnn.GRUCell(16)
zero_state = gru_cell.zero_state(1, tf.float32)
initial_state = tf.placeholder(tf.float32, zero_state.get_shape())
out_tensor, final_state = tf.nn.dynamic_rnn(
gru_cell,
parent_tensor,
initial_state=initial_state,
time_major=False)
print(out_tensor.get_shape())
(1, ?, 16)
正如我所期望的那样,它将输出形状报告为。第二个维度是?
因为max_time
未知。
现在我将其切换到time_major=True
. 根据文档,我希望只交换前两个轴,所以输出形状应该是(?, 1, 16)
. 但事实并非如此。相反,它是(1, 1, 16)
. 这是怎么回事? max_time
仍然未知,那么为什么将其硬编码为1?