首页 > 解决方案 > LSTM 分类

问题描述

问题:我有许多发送和接收消息的设备。每条消息都有一个消息类型。我想根据每个设备收到的消息进行预测,如果将来该设备将被禁用。
输入:大小的 numpy 数组 =(设备长度,每个设备接收的最大消息长度,功能数量)=(10000,1350,20)。这些特征是热编码的消息类型和以秒为单位的时间戳。
我发现的所有教程的问题是输入的第一个维度是时间步长。我基本上希望 LSTM 在每个设备上、每个时间步上进行训练,并学习预测将来哪些设备将被禁用。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM

model = Sequential()

model.add(LSTM(128, input_shape=(1385,20), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))

import tensorflow as tf
optimizer = tf.keras.optimizers.Adam(lr=1e-3, decay=1e-5)
model.compile(loss=tf.keras.losses.BinaryCrossentropy(from_logits=True), 
optimizer=optimizer, metrics=['accuracy'])

history = model.fit(X_train, y_train, batch_size=64, epochs=1, validation_data= 
(X_test, y_test))

目前,该模型仅对所有输入预测相同的值,并且所有 epoch 的验证准确率都停留在 65%。我的猜测是模型认为设备的长度是时间步长,而其他两个值是特征。那么我如何告诉模型我想对每个设备而不是每个时间步进行分类?

标签: classificationlstmrecurrent-neural-network

解决方案


推荐阅读