我正在使用tensorflow来训练RNN模型。我将输入张量存储为形状(批量大小,时间步长,128),其中128是一个热编码的长度,表示ASCII字符。要在RNN中输入时间步,我使用以下函数将其重新整形为(批量大小,128)......
def getTimeStep(x, t):
return tf.reshape(x[:, t, :], (-1, 128))
我想知道这是否是为RNN提供时间步骤的最有效方式。我不确定在tensorflow中如何排序内存。这是序列序列编码器的其余代码。请注意,我在每个时间步后保存输出,因为我想将它提供给解码器中的注意模型。我能做得更有效率吗?
input_tensor = tf.placeholder(tf.float32, (BATCH_SIZE, TIME_STEPS, 128), 'input_tensor')
expected_output = tf.placeholder(tf.float32, (BATCH_SIZE, TIME_STEPS, 128), 'expected_output')
with tf.variable_scope('encoder') as encode_scope:
encoder_rnn = rnn.MultiRNNCell([rnn.GRUCell(1024)] * 3)
encoder_state = tf.zeros((BATCH_SIZE, encoder_rnn.state_size))
encoder_outputs = [None] * TIME_STEPS
for t in range(TIME_STEPS):
encoder_outputs[t], encoder_state = encoder_rnn(getTimeStep(input_tensor, t), encoder_state)
encode_scope.reuse_variables()
encoder_outputs = tf.concat(1, [tf.reshape(t, (BATCH_SIZE, 1, 1024)) for t in encoder_outputs])