首页 > 解决方案 > LSTM 时间序列分类 val_acc 固定或小于 0.5

问题描述

在阅读和谷歌搜索后,我担心我的数据有问题。数据来自两个来源,有不同的间隔。我加入了这两个来源并重新采样了数据,因此它具有相同的线性函数间隔。比我使用 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

标签: pandaskerastime-seriesclassificationlstm

解决方案


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


推荐阅读