我正在尝试为文本编写自己的 LSTM 变分自动编码器,并且已经很好地了解了编码步骤的工作原理以及如何对潜在向量Z
进行采样。现在的问题是我应该如何将Z
传递给解码器。对于解码器的输入,我有一个开始标记<s>
,它将隐藏状态保留h
,并且解码器中 LSTM 单元的单元格状态c
。
我应该使初始状态都h
和c
等于Z
,只是其中之一,还是其他什么?
使用 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 文档中对此进行了明确解释。