我们放置了一个传感器来检测加速度计中的异常情况。
只有一个传感器,所以我的数据是一维数组。
我试图使用LSTM自动编码器进行异常检测。
但是我的模型没有用,因为训练和验证集的损失正在减少,但准确性没有改变。
这是我的代码和培训日志:
dim = 1
timesteps = 32
data.shape = (-1,timesteps,dim)
model = Sequential()
model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))
model.add(Dense(dim))
lr = 0.00001
Nadam = optimizers.Nadam(lr=lr)
model.compile(loss='mae', optimizer=Nadam ,metrics=['accuracy'])
EStop = EarlyStopping(monitor='val_loss', min_delta=0.001,patience=150, verbose=2, mode='auto',restore_best_weights=True)
history = model.fit(data,data,validation_data=(data,data),epochs=2000,batch_size=64,verbose=2,shuffle=False,callbacks=[EStop]).history
培训日志
Train on 4320 samples, validate on 4320 samples
Epoch 1/2000
- 3s - loss: 0.3855 - acc: 7.2338e-06 - val_loss: 0.3760 - val_acc: 7.2338e-06
Epoch 2/2000
- 2s - loss: 0.3666 - acc: 7.2338e-06 - val_loss: 0.3567 - val_acc: 7.2338e-06
Epoch 3/2000
- 2s - loss: 0.3470 - acc: 7.2338e-06 - val_loss: 0.3367 - val_acc: 7.2338e-06
...
Epoch 746/2000
- 2s - loss: 0.0021 - acc: 1.4468e-05 - val_loss: 0.0021 - val_acc: 1.4468e-05
Epoch 747/2000
- 2s - loss: 0.0021 - acc: 1.4468e-05 - val_loss: 0.0021 - val_acc: 1.4468e-05
Epoch 748/2000
- 2s - loss: 0.0021 - acc: 1.4468e-05 - val_loss: 0.0021 - val_acc: 1.4468e-05
Restoring model weights from the end of the best epoch
Epoch 00748: early stopping
答案 0 :(得分:2)
几件事
答案 1 :(得分:2)
正如@MatiasValdenegro所说,当您要进行回归时,不应使用准确性。 您会看到您的模型可能不错,因为损失随着时间的流逝而减少,并且在早期停止时损失很小。 在回归问题中,通常使用以下度量标准:
均方误差:mean_squared_error,MSE或mse
平均绝对错误:mean_absolute_error,MAE,mae
平均绝对百分比错误:mean_absolute_percentage_error,MAPE, 映射
余弦接近度:cosine_proximity,余弦
要正确选择指标,您应该对此进行更改(例如,“均方误差”):
model.compile(loss='mae', optimizer=Nadam ,metrics=['mse'])
正如已经说过的那样,您的模型似乎很好,您只是在查看错误的指标。
希望这会有所帮助,随时问。
答案 2 :(得分:0)
在遇到此问题时,尽早停止并不是进行正则化的最佳技术。至少,当您仍在努力修复它时,我宁愿将其取出或将其替换为其他正则化方法。弄清楚会发生什么。
还有另一个建议。您能否稍微更改一下验证集并查看其行为?您是如何建立验证集的?
您是否对数据进行了标准化/标准化?请注意,标准化对于LSTM更为重要
指标绝对是一个问题。以上建议是好的。