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

时间:2019-06-24 03:46:17

标签: pandas keras time-series classification lstm

阅读并谷歌搜索后,我担心我的数据有问题。数据来自两个来源,且间隔不同。我加入了这两个来源,并对数据进行了重新采样,以使其具有相同的线性函数间隔。比起我使用StandardScaler缩放数据而言。最后,将数据分为小块(60行或要素-尝试了不同大小的块)。

我注意到在缩放某些功能(列)后发生了很多变化的一件事-这里是数据样本:

data sample

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

我曾尝试过几种配置:

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)

OR:

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

1 个答案:

答案 0 :(得分:0)

问题出在数据上。我了解到,在尝试使用不同的网络参数之前,固定精度或没有改善的模型表明数据存在问题。