带嵌入层的 Keras LSTM 自动编码器
Keras LSTM autoencoder with embedding layer
我正在尝试在 Keras 中构建一个文本 LSTM 自动编码器。我想使用嵌入层,但我不确定如何实现它。代码如下所示。
inputs = Input(shape=(timesteps, input_dim))
embedding_layer = Embedding(numfeats + 1,
EMBEDDING_DIM,
weights=[data_gen.get_embedding_matrix()],
input_length=maxlen,
trainable=False)
embedded_sequence = embedding_layer(inputs)
encoded = LSTM(num_units)(inputs)
decoded = RepeatVector(timesteps)(encoded)
decoded = LSTM(???, return_sequences=True)(decoded)
sequence_autoencoder = Model(inputs, decoded)
sequence_autoencoder.compile(loss='binary_crossentropy', optimizer='adam')
我不确定如何将输出解码为目标序列(显然是输入序列)。
无法在解码器中实现逆嵌入层,因为嵌入层不可微。可能还有其他解决方法:
从嵌入层的输出到具有相似维度的层构建自动编码器。然后使用最近邻或其他算法从那里生成单词序列。
构造一个非对称自编码器,使用时间分布层和密集层来降低LSTM输出的维度。
希望这对您有所帮助。
您可以先将单词转换为嵌入并将其传递给 fit()
expected_output = np.array([[embedding_matrix[word_index] for word_index in encoded_sequence] for encoded_sequence in padded_sequences])
history = lstm_autoencoder.fit(padded_sequences, expected_output, epochs=15, verbose=1)
我正在尝试在 Keras 中构建一个文本 LSTM 自动编码器。我想使用嵌入层,但我不确定如何实现它。代码如下所示。
inputs = Input(shape=(timesteps, input_dim))
embedding_layer = Embedding(numfeats + 1,
EMBEDDING_DIM,
weights=[data_gen.get_embedding_matrix()],
input_length=maxlen,
trainable=False)
embedded_sequence = embedding_layer(inputs)
encoded = LSTM(num_units)(inputs)
decoded = RepeatVector(timesteps)(encoded)
decoded = LSTM(???, return_sequences=True)(decoded)
sequence_autoencoder = Model(inputs, decoded)
sequence_autoencoder.compile(loss='binary_crossentropy', optimizer='adam')
我不确定如何将输出解码为目标序列(显然是输入序列)。
无法在解码器中实现逆嵌入层,因为嵌入层不可微。可能还有其他解决方法:
从嵌入层的输出到具有相似维度的层构建自动编码器。然后使用最近邻或其他算法从那里生成单词序列。
构造一个非对称自编码器,使用时间分布层和密集层来降低LSTM输出的维度。
希望这对您有所帮助。
您可以先将单词转换为嵌入并将其传递给 fit()
expected_output = np.array([[embedding_matrix[word_index] for word_index in encoded_sequence] for encoded_sequence in padded_sequences])
history = lstm_autoencoder.fit(padded_sequences, expected_output, epochs=15, verbose=1)