LSTM 时间序列分类 val_acc 固定或小于 0.5

Posted

技术标签:

【中文标题】LSTM 时间序列分类 val_acc 固定或小于 0.5【英文标题】:LSTM Time Series Classificasion val_acc is fixed or less than 0.5 【发布时间】:2019-11-05 20:23:34 【问题描述】:

在阅读和谷歌搜索后,我担心我的数据有问题。数据来自两个来源,有不同的间隔。我加入了这两个来源并重新采样了数据,因此它具有相同的间隔和线性函数。比我使用 StandardScaler 缩放数据。最后将数据分成小块(60 行或特征 - 尝试不同大小的块)。

我注意到在缩放某些特征(列)后发生了很大变化 - 这是数据示例:

这里的一个特征是零。在其他示例中,它会发生变化。

我尝试了几种配置:

model = Sequential()
model.add(LSTM(256, input_shape=(4,38)))
model.add(Dense(1, activation='sigmoid'))

model.summary()

adam = Adam(lr=0.001)
chk = ModelCheckpoint('best_model.pkl', monitor='val_acc', save_best_only=True, mode='max', verbose=1)
model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy'])
model.fit(train, train_target, epochs=300, batch_size=128, callbacks=[chk], validation_data=(validation,validation_target), shuffle=True)

或者:

model = keras.Sequential()
model.add(LSTM(32, return_sequences=True,init='normal', input_shape=(4, 46)))
model.add(LSTM(32, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))
opt = SGD(lr=0.00008)
model.compile(loss='mean_squared_error', optimizer=opt,  metrics=['accuracy'])
model.fit(train, train_target, epochs=300, batch_size=128, callbacks=[chk], validation_data=(validation,validation_target), shuffle=True)

无论有多少样本 - 1000、2000、5000 - val 准确度始终约为 0.5 或更低,并且在大部分训练中都是固定的:

333/333 [==============================] - 0s 485us/step - loss: 4.5135 - val_loss: 4.4903
333/333 [==============================] - 0s 492us/step - loss: 4.5135 - val_loss: 4.4903
333/333 [==============================] - 0s 481us/step - loss: 4.5135 - val_loss: 4.4903
333/333 [==============================] - 0s 471us/step - loss: 4.5135 - val_loss: 4.4903
333/333 [==============================] - 0s 467us/step - loss: 4.5135 - val_loss: 4.4903
333/333 [==============================] - 0s 517us/step - loss: 4.5135 - val_loss: 4.4903
333/333 [==============================] - 0s 478us/step - loss: 4.5135 - val_loss: 4.4903

【问题讨论】:

你的 LSTM 初始化不好。它应该是“泽维尔”。另外,你的lr 很低 谢谢,我试试。播种帖子说减少lr。 【参考方案1】:

问题出在数据上。我了解到,在尝试网络的不同参数之前,固定的准确性或没有改进的模型表明数据存在问题。

【讨论】:

以上是关于LSTM 时间序列分类 val_acc 固定或小于 0.5的主要内容,如果未能解决你的问题,请参考以下文章

“val_acc”根本没有改变

在 TensorFlow 中使用多对多 LSTM 进行视频分类

使用(?) LSTM 进行多变量时间序列分类

Keras:如何找出零假设?

LSTM调参经验

验证准确度为零,损失更高。使用 LSTM 进行意图分类