LSTM时间序列数据分类模型精度低

时间:2020-01-02 11:27:08

标签: keras lstm

我正在尝试使用LSTM层创建用于时间序列分析的模型,但是即使使用密集层而没有LSTM时,准确性也很低。 数据是时间序列(合成频谱),它取决于4个参数。更改参数可以使用不同大小的数据集,其中每个样本或多或少都彼此不同。但是,无论数据集准确性的大小始终低至0.0-0.32%。

example of data

具有LSTM的模型:

-Djavax.net.ssl.keyStore=<location of your keystore>
-Djavax.net.ssl.keyStorePassword=<your storepass>
-Djavax.net.ssl.trustStore=<location of your truststore>
-Djavax.net.ssl.trustStorePassword=<your storepass>
-Djavax.net.ssl.trustStoreType=jks

输出:

print(trainset.shape)
print(testset.shape)
print(trainlabels.shape)

model = Sequential()

model.add(Masking(mask_value=0.0, input_shape=(trainset.shape[1], trainset.shape[2])))

model.add(LSTM(10, activation='relu', stateful=False, return_sequences=False))
model.add(Dropout(0.3))
model.add(Dense(len(trainlabels), activation='relu'))

model.compile(loss='sparse_categorical_crossentropy', 
              optimizer='Adam', metrics=['accuracy'])

print(model.summary())
model.fit(trainset, trainlabels, validation_data=(testset, testlabels), 
          epochs=3, batch_size=10)

scores = model.evaluate(testset, testlabels, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))

训练数据中的某些值为0.0,因此使用“遮罩”。 我尝试使用不同的损失,优化器,激活,Dropout和图层参数。即使添加了更多的密集层或更改了批次大小,结果也始终是相同的。

密集模型:

数据格式是2D而不是3D。

(2478, 600, 1)
(620, 600, 1)
(2478,)
Model: "sequential_7"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
masking_7 (Masking)          (None, 600, 1)            0         
_________________________________________________________________
lstm_7 (LSTM)                (None, 10)                480       
_________________________________________________________________
dropout_7 (Dropout)          (None, 10)                0         
_________________________________________________________________
dense_7 (Dense)              (None, 2478)              27258     
=================================================================
Total params: 27,738
Trainable params: 27,738
Non-trainable params: 0
_________________________________________________________________
None
Train on 2478 samples, validate on 620 samples
Epoch 1/3
2478/2478 [==============================] - 53s 22ms/step - loss: 8.9022 - accuracy: 4.0355e-04 - val_loss: 7.8152 - val_accuracy: 0.0016
Epoch 2/3
2478/2478 [==============================] - 54s 22ms/step - loss: 7.8152 - accuracy: 4.0355e-04 - val_loss: 7.8152 - val_accuracy: 0.0016
Epoch 3/3
2478/2478 [==============================] - 53s 21ms/step - loss: 7.8152 - accuracy: 4.0355e-04 - val_loss: 7.8152 - val_accuracy: 0.0016
Accuracy: 0.16%

输出:

model=keras.Sequential([
    keras.layers.Masking(mask_value=0.0, input_shape=(trainset.shape[1],)),

    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dropout(0.05),
    keras.layers.Dense(64, activation='relu'),
    keras.layers.Dropout(0.05),
    keras.layers.Dense(len(labels), activation='softmax')
])

model.compile(optimizer='adam', 
             loss='sparse_categorical_crossentropy',
             metrics=['accuracy'])

model.fit(np.uint8(trainset), np.uint8(trainlabels), epochs=100)

test_loss, test_acc=model.evaluate(np.uint8(testset), np.uint8(testlabels),


          verbose=2)
print(test_acc)

使用此模型,损耗非常低,但准确性也很低。

应该为我的数据使用哪种模型架构?

提前感谢您帮助学习这些知识!

0 个答案:

没有答案