在张量流中,如何迭代存储在张量中的一系列输入?

San*_*ram 9 python tensorflow recurrent-neural-network gated-recurrent-unit

我正在尝试RNN的可变长度多变量序列分类问题.

我已经定义了以下函数来获取序列的输出(即,从序列的最终输入被馈送后RNN单元的输出)

def get_sequence_output(x_sequence, initial_hidden_state):
    previous_hidden_state = initial_hidden_state
    for x_single in x_sequence:
        hidden_state = gru_unit(previous_hidden_state, x_single)
        previous_hidden_state = hidden_state
    final_hidden_state = hidden_state
    return final_hidden_state
Run Code Online (Sandbox Code Playgroud)

x_sequence(?, ?, 10)第一个形状的张量?是批量大小和第二?用于序列长度,每个输入元素的长度为10. gru函数采用先前的隐藏状态和当前输入,并吐出下一个隐藏状态(标准门控循环单元).

我收到一个错误:'Tensor' object is not iterable. 如何以序列方式迭代Tensor(一次读取单个元素)?

我的目标是为gru序列中的每个输入应用函数并获得最终的隐藏状态.

wuh*_*y08 10

在TF> = 1.0,tf.pack并且tf.unpack被重命名为tf.stacktf.unstack分别


cha*_*255 7

您可以使用unpack函数将张量转换为列表,该函数将第一个维度转换为列表.还有一个分离功能,可以做类似的事情.我在我正在研究的RNN模型中使用unstack.

y = tf.unstack(tf.transpose(y, (1, 0, 2)))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,y从形状开始(BATCH_SIZE,TIME_STEPS,128)我将其转置为使时间步长为外部尺寸,然后将其解压缩到张量列表中,每个时间步长一个.现在y列表中的每个元素(如果有形状)(BATCH_SIZE,128),我可以将它提供给我的RNN.

  • 如果time_steps不存在(序列的可变长度),这将不起作用. (3认同)