我有一个简单的数据框,并希望构建我的LSTM架构,以便可以进行异常检测
from numpy import array
from keras.models import Sequential, Model
from keras.layers import Input, Dense, LSTM, RepeatVector,TimeDistributed
from keras import optimizers
from keras.callbacks import EarlyStopping
X = array([0.1, 0.2, 0.3, 0.4, 25, 0.5, 0.6, 0.7])
X_train = X.reshape(1, 8, 1)
y = X.reshape(1, 8)
我希望我的LSTM编码器可以告诉我数据点25的异常,同时它会尝试学习序列
model = Sequential()
model.add(LSTM(4, input_shape=(8, 1), return_sequences=True))
model.add(TimeDistributed(Dense(1)))
model.compile(loss='mean_squared_error', optimizer='adam')
print(model.summary())
history = model.fit(X_train, y, epochs=500, batch_size=1, verbose=2)
result = model.predict(X_train, batch_size=1, verbose=0)
结果是
[0.6, 0.9, 1.0, 1.1, 2.4, 1.1, 1.3, 1.2]
在数据点25上,对我来说,这看起来并不异常
我应该对我的体系结构进行哪些更改,以使其清晰可见
答案 0 :(得分:0)
我不确定为什么您没有看到标签形状错误。
无论如何,增加单位可以解决问题。
y = X.reshape(1, 8, 1)
model.add(LSTM(100, input_shape=(8, 1), return_sequences=True))
print(result)
[[[ 0.3147867 ] [ 0.40975055] [ 0.19347075] [ 0.43266642] [24.969408 ] [ 0.5055496 ] [ 0.61411744] [ 0.72490424]]]
但是,这只是一个训练示例。我建议对训练和验证集使用更大的数据集,并检查验证损失。