我正在尝试构建LSTM自动编码器来预测时间序列数据。由于我是Python新手,因此在解码部分会出错。我试图像这里和Keras那样建立它。我完全无法理解给定示例之间的区别。我现在拥有的代码如下所示:
问题1:每个样本有2000个值时,如何选择batch_size和input_dimension?
问题2:如何使LSTM自动编码器正常工作(模型和预测)?这仅是模型,但如何预测?是说从样本10开始一直到数据结束,这是在预测吗?
Mydata总共有1500个样本,我将使用10个时间步长(如果更好,则更多),每个样本有2000个值。如果您需要更多信息,我也会在以后包括它们。
trainX = np.reshape(data, (1500, 10,2000))
from keras.layers import *
from keras.models import Model
from keras.layers import Input, LSTM, RepeatVector
Run Code Online (Sandbox Code Playgroud)
参数
timesteps=10
input_dim=2000
units=100 #choosen unit number randomly
batch_size=2000
epochs=20
Run Code Online (Sandbox Code Playgroud)
模型
inpE = Input((timesteps,input_dim))
outE = LSTM(units = units, return_sequences=False)(inpE)
encoder = Model(inpE,outE)
inpD = RepeatVector(timesteps)(outE)
outD1 = LSTM(input_dim, return_sequences=True)(outD
decoder = Model(inpD,outD)
autoencoder = Model(inpE, outD)
autoencoder.compile(loss='mean_squared_error',
optimizer='rmsprop',
metrics=['accuracy'])
autoencoder.fit(trainX, trainX,
batch_size=batch_size,
epochs=epochs)
encoderPredictions = encoder.predict(trainX)
Run Code Online (Sandbox Code Playgroud)
我使用的LSTM模型就是这样的:
def get_model(n_dimensions):
inputs = Input(shape=(timesteps, input_dim))
encoded = LSTM(n_dimensions, return_sequences=False, name="encoder")(inputs)
decoded = RepeatVector(timesteps)(encoded)
decoded = LSTM(input_dim, return_sequences=True, name='decoder')(decoded)
autoencoder = Model(inputs, decoded)
encoder = Model(inputs, encoded)
return autoencoder, encoder
autoencoder, encoder = get_model(n_dimensions)
autoencoder.compile(optimizer='rmsprop', loss='mse',
metrics=['acc', 'cosine_proximity'])
history = autoencoder.fit(x, x, batch_size=100, epochs=100)
encoded = encoder.predict(x)
Run Code Online (Sandbox Code Playgroud)
它适用于具有x的大小(3000, 180, 40),即3000个样本timesteps=180和的数据input_dim=40。
| 归档时间: |
|
| 查看次数: |
4835 次 |
| 最近记录: |