我正在尝试为文本编写自己的LSTM变分自动编码器,并且已经很好地理解了编码步骤的工作方式以及我如何对潜矢量Z
进行采样。现在的问题是我应该如何将Z
传递给解码器。对于解码器的输入,我有一个开始令牌<s>
,该令牌保留了隐藏状态h
和解码器中LSTM单元的单元状态c
。
我应该使初始状态h
和c
等于Z
,还是其中之一,还是其他?
答案 0 :(得分:1)
使用RepeatVector可以重复n
次潜伏输出。然后,将其输入LSTM。这是一个最小的示例:
# latent_dim: int, latent z-layer shape.
decoder_input = Input(shape=(latent_dim,))
_h_decoded = RepeatVector(timesteps)(decoder_input)
decoder_h = LSTM(intermediate_dim, return_sequences=True)
_h_decoded = decoder_h(_h_decoded)
decoder_mean = LSTM(input_dim, return_sequences=True)
_x_decoded_mean = decoder_mean(_h_decoded)
decoder = Model(decoder_input, _x_decoded_mean)
在Keras documentation中有清楚的解释。