UPDATE1:
我引用的代码正是书中的代码,你可以找到它here.
唯一的问题是我不想在解码器部分使用embed_size.这就是为什么我认为我根本不需要嵌入层,因为如果我放入嵌入层,我需要在解码器部分使用embed_size(如果我错了,请纠正我).
总的来说,我试图在不使用嵌入层的情况下采用相同的代码,因为我需要在解码器部分中使用vocab_size.
我认为评论中提供的建议可能是正确的(使用one_hot_encoding)我如何面对这个错误:
当我做one_hot_encoding时:
tf.keras.backend.one_hot(indices=sent_wids, classes=vocab_size)
我收到了这个错误:
在check_num_samples中
你应该指定steps_name参数
ValueError:如果您的数据采用符号张量的形式,则应指定steps_per_epoch参数(而不是batch_size参数,因为符号张量应生成批量输入数据)
我准备数据的方式是这样的:
sent_lens的形状是(87716,200),我想以一种可以将其输入LSTM的方式重塑它.
这里200代表sequence_lenght,87716代表我有的样本数.
下面是LSTM Autoencoder的代码:
inputs = Input(shape=(SEQUENCE_LEN,VOCAB_SIZE), name="input")
encoded = Bidirectional(LSTM(LATENT_SIZE), merge_mode="sum", name="encoder_lstm")(inputs)
decoded = RepeatVector(SEQUENCE_LEN, name="repeater")(encoded)
decoded = LSTM(VOCAB_SIZE, return_sequences=True)(decoded)
autoencoder = Model(inputs, decoded)
autoencoder.compile(optimizer="sgd", loss='mse')
autoencoder.summary()
history = autoencoder.fit(Xtrain, Xtrain,batch_size=BATCH_SIZE,
epochs=NUM_EPOCHS)
我是否还需要做任何额外的事情,如果不是,为什么我不能做到这一点?
请告诉我哪个部分不清楚我会解释.
谢谢你的帮助:)
解决方法:
您需要以下列方式重塑数据:
>样品.一个序列是一个样本.批次由一个或
更多样本.
>时间步骤.一步是一点观察
在样本中.
>功能.一个特征是一次一个观察
步.
(样本,time_steps,功能)
然后您的模型应如下所示(简化版):
visible = Input(shape=(time_steps, features))
encoder = LSTM(100, activation='relu')(visible)
# define reconstruct decoder
decoder = RepeatVector(time_steps)(encoder)
decoder = LSTM(100, activation='relu', return_sequences=True)(decoder)
decoder = TimeDistributed(Dense(features))(decoder)
model = Model(visible, decoder)
查看this精彩教程.应该对你的情况有所帮助.
但是,那说你可能只需要expand the dimensions的数组.
检查this,它可能会清除.
希望以上是有帮助的.