不确定此代码段中正在发生什么

时间:2018-12-03 06:14:09

标签: python tensorflow lstm multi-layer

我在一个开源实现中遇到了以下代码片段,以实现多层lstm单元: 变量: fw_cellbw_cell是先前创建的LSTM个退出单元。 self.word_embeddings_1是3维张量,形状为[batchsize , timesteps , embeddingdimension] self.sequence_lengths_1给出每个条目的序列长度,并有shape [batchsize]

for _ in range(self.num_layers_encoder):


    (out_fw, out_bw), (state_fw, state_bw) = tf.nn.bidirectional_dynamic_rnn(
                cell_fw=fw_cell,
                cell_bw=bw_cell,
                inputs=self.word_embeddings_1,
                sequence_length=self.sequence_lengths_1,
                dtype=tf.float32)
            encoder_outputs = tf.concat((out_fw, out_bw), -1)

    bi_state_c = tf.concat((state_fw.c, state_bw.c), -1)
    bi_state_h = tf.concat((state_fw.h, state_bw.h), -1)
    bi_lstm_state = tf.nn.rnn_cell.LSTMStateTuple(c=bi_state_c, h=bi_state_h)
        encoder_state = tuple([bi_lstm_state] * self.num_layers_encoder)

我看不到for循环如何实现所需的实现

在我看来,在for循环的每次迭代中,变量encoder_outputs似乎都被LSTM退出单元的输出覆盖,如果传递给LSTM单元的输入更改为先前的LSTM单元的编码器输出,那就很好了州。如果每次迭代都没有变化,for循环的迭代看起来是否多余?另外,应该有一个追加功能,而不是仅仅分配?像

encoder_outputs = encoder_outputs.append(tf.concat((out_fw,out_bw),-1)))

还是我只是想念一些东西?

0 个答案:

没有答案