Tensorflow 如何训练编码器-解码器模型?
我并不真正理解培训LSTM编码器-解码器的明显(或实际上相同?)培训程序 一方面,在本教程中,他们使用for循环进行培训: 但是这里 (第一款) 只是用了一个简单的Tensorflow 如何训练编码器-解码器模型?,tensorflow,keras,encoder-decoder,Tensorflow,Keras,Encoder Decoder,我并不真正理解培训LSTM编码器-解码器的明显(或实际上相同?)培训程序 一方面,在本教程中,他们使用for循环进行培训: 但是这里 (第一款) 只是用了一个简单的 # Run training model.compile(optimizer='rmsprop', loss='categorical_crossentropy') model.fit([encoder_input_data, decoder_input_data], decoder_target_data,
# Run training
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
model.fit([encoder_input_data, decoder_input_data], decoder_target_data,
batch_size=batch_size,
epochs=epochs,
validation_split=0.2)
在这里,两种程序都说,他们是通过教师强迫的方法进行培训的
但我不明白为什么两种方法都是一样的
为什么我可以像普通模型训练一样,在没有for循环的情况下训练编码器-解码器,尽管我需要上一个解码步骤来训练下一个解码步骤?在LSTM中,时间步骤的输出仅取决于状态和上一个时间步骤。在第二个链接(keras博客)中,培训期间发生的情况是最终状态未被使用。。。只有每一步向量。在推断过程中,状态从一个迭代保存到下一个迭代 下面的答案解释了LSTM中时间步长的概念 为了便于讨论,这是一幅有用的图片。 要与以下内容保持一致:
- 当指定return_sequences=True时,keras返回上述每个时间步长h0,hN向量李>
- 当指定return_state=True时,将返回最后一侧的输出(最右侧的右箭头为A块)
# We set up our decoder to return full output sequences,
# and to return internal states as well. We don't use the
# return states in the training model, but we will use them in inference.
您可以尝试查看长度为2的序列。
如果在一次放炮中计算时间步长0和1的预测梯度,就LSTM而言,h0(时间步长0的输出)的梯度仅取决于相应的输入;h1的梯度(时间步长1的输出)取决于x0和x1以及通过LSTM的变换。如果你一步一步地计算梯度时间,你会得到完全相同的计算结果
如果您查看transformer模型,您会发现它们使用掩码来屏蔽序列,以确保步骤N仅取决于前一步N。对不起,但由于您使用非标准单词,尤其是RNN,这些单词并不精确:隐藏向量、单元状态。我不知道你所说的每步向量是什么意思……为什么(你怎么知道)模型没有使用“最终”状态(不管你是什么意思)?为什么它只取决于h值呢。我假设你每一步的h是隐藏状态?@cltid根据答案:h0..hN输出在Keras API中被称为返回序列;“A”块最右边的箭头被Keras API称为最后或最终状态。最右边的箭头是最后一个A单元之前的箭头吗?最后一个状态意味着最后一个隐藏状态(正如返回序列意味着最后一个单元格的输出??图中的每个A单元格接受一个输入(xN),在图中产生一个输出(hX)和一个状态(右箭头)。根据Keras API,
最后一个状态
是最右边的右箭头(序列结束)一个单元格。图中未显示此箭头。