据我所知,为LSTM预处理数据的一般步骤包括以下几个步骤
vocab_size = 20000 # 只考虑前20000个词maxlen = 200 # 只考虑每篇影评的前200个词(x_train, y_train), (x_val, y_val) = keras.datasets.imdb.load_data(num_words=vocab_size)print(len(x_train), "训练序列")print(len(x_val), "验证序列")x_train0 = keras.preprocessing.sequence.pad_sequences(x_train, maxlen=maxlen)x_val0 = keras.preprocessing.sequence.pad_sequences(x_val, maxlen=maxlen)
在这里,训练数据将包含25,000个变长样本,应用序列填充后,如果序列长度超过200,则会截断数据至长度200;如果数据长度不足200,则会用0填充到200的长度。
如果你的数据序列长度在200 +/- 50之间,或者在90到500的范围内,这并不是一个大问题。
如何处理数据长度从100到60,000的这种情况呢?
回答:
**在LSTM架构中,有一种处理方法:**
-
在你的LSTM中,将input_shape参数的时间步组件设置为None,这将帮助你接受变长序列。
-
现在会出现一个问题,因为你需要将输入适应到numpy数组中,而numpy数组具有严格的结构(相同长度)。所以我做的就是将你的输入按相同长度分组成批次,然后创建一个数组。现在将它输入到你的网络中。
例如-
lstm = tf.keras.layers.LSTM(latent_dim, input_shape=(None, vocab_len, ))for ip in inputs.groupby(lenghtofinputs): model.fit(ip, outputof(ip), epoch=100)
请让我知道这是否适用于你的情况,对我来说是有效的。