我正在尝试构建一个LSTM自动编码器,目的是从序列中获取一个固定大小的矢量,这表示序列尽可能好.该自动编码器由两部分组成:
LSTM
编码器:获取序列并返回输出向量(return_sequences = False
)LSTM
解码器:获取输出向量并返回序列(return_sequences = True
)因此,最后,编码器是多对一 LSTM,解码器是一对多 LSTM.
图片来源:Andrej Karpathy
在较高的层次上,编码看起来像这样(类似于这里描述的):
encoder = Model(...)
decoder = Model(...)
autoencoder = Model(encoder.inputs, decoder(encoder(encoder.inputs)))
autoencoder.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
autoencoder.fit(data, data,
batch_size=100,
epochs=1500)
Run Code Online (Sandbox Code Playgroud)
data
数组的形状(训练样本数,序列长度,输入维数)(1200, 10, 5)
如下所示:
array([[[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
...,
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]],
... ] …
Run Code Online (Sandbox Code Playgroud)