我正在尝试在这里运行Seq2Seq示例,https://blog.keras.io/building-autoencoders-in-keras.html
from keras.layers import Input, LSTM, RepeatVector
from keras.models import Model
inputs = Input(shape=(timesteps, input_dim))
encoded = LSTM(latent_dim)(inputs)
decoded = RepeatVector(timesteps)(encoded)
decoded = LSTM(input_dim, return_sequences=True)(decoded)
sequence_autoencoder = Model(inputs, decoded)
encoder = Model(inputs, encoded)
我的输入是分类编码,例如[1,23,6,12,4,0,0,0],有25个类别,固定长度为1000个。
因此,代码的更新版本如下所示:
MInput = Input(shape=(MAX_LEN, CATEGORY_NUMS))
encode_seq = LSTM(32)(MInput)
decode_seq = RepeatVector(MAX_LEN)(encode_seq)
decode_seq = LSTM(CATEGORY_NUMS, return_sequences=True)(decode_seq)
autoencoder = Model(MInput, decode_seq)
encoder = Model(MInput, encode_seq)
但是,我得到“输入0与层lstm_2不兼容:预期ndim = 3,发现ndim = 2”错误。
将return_sequences = True添加到第一个LSTM图层或删除RepeatVector都会导致不兼容错误。
我不确定我还有什么准备我的意见。
谢谢!
答案 0 :(得分:0)
您的输入X和输出Y应该是形状(batch_size,timesteps,input_dim)。尝试打印其形状并将其与模型摘要输出形状进行比较。