LSTM准确率未变而损失降低

我们放置了一个传感器来检测加速度计中的异常情况。

只有一个传感器,所以我的数据是一个一维数组。

我尝试使用LSTM自编码器进行异常检测。

但我的模型没有正常工作,因为训练集和验证集的损失都在减少,但准确率未变。

这是我的代码和训练日志:

dim = 1timesteps = 32data.shape = (-1,timesteps,dim)model = Sequential()model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))model.add(Dense(dim))lr = 0.00001Nadam = 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 samplesEpoch 1/2000 - 3s - loss: 0.3855 - acc: 7.2338e-06 - val_loss: 0.3760 - val_acc: 7.2338e-06Epoch 2/2000 - 2s - loss: 0.3666 - acc: 7.2338e-06 - val_loss: 0.3567 - val_acc: 7.2338e-06Epoch 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-05Epoch 747/2000 - 2s - loss: 0.0021 - acc: 1.4468e-05 - val_loss: 0.0021 - val_acc: 1.4468e-05Epoch 748/2000 - 2s - loss: 0.0021 - acc: 1.4468e-05 - val_loss: 0.0021 - val_acc: 1.4468e-05Restoring model weights from the end of the best epochEpoch 00748: early stopping

回答:

几点建议

  • 正如评论区的Matias所指出的,你在做回归而不是分类。准确率对于回归不会给出预期的值。也就是说,你可以看到准确率实际上是提高了(从0.0000072提高到0.0000145)。检查模型的直接输出,以了解它对原始时间序列的近似程度如何。
  • 当你的验证数据与训练数据相同时,你可以安全地省略验证数据。
  • 对于自编码器,通常希望以某种方式压缩数据,以便能够以更低的维度来表示相同的数据,这样更容易分析(无论是用于异常检测还是其他目的)。在你的案例中,你是在增加维度而不是减少维度,这意味着你的自编码器的最佳策略将是直接传递它接收到的相同值(你的时间序列的值被发送到50个LSTM单元,这些单元将其结果发送到1个Dense单元)。如果你将return_sequence设置为False(即只返回最后一个时间步的结果),最好是返回到多个单元,然后你尝试从中重建时间序列。这样做可能会失败,但仍然可能导致更好的模型。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注