python – 如何重塑文本数据以适合keras中的LSTM模型

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,它可能会清除.

希望以上是有帮助的.

上一篇:python – Keras – 自动编码器精度为零


下一篇:python – Keras autoencoder简单的例子有一个奇怪的输出