如何在 Keras 中构建 LSTM 分类器模型

How to Build an LSTM Classifier Model in Keras

我是 Keras 和 RNN 的新手 我需要在 Keras 中使用 LSTM RNN 为包含一组形状 (1795575, 6) 和形状标签数组 (1795575, 1) 的数据集构建分类器模型。标签是 11 class(来自 0至 10) 形状为(575643, 6)的测试集和形状为(575643, 1.Again的标签数组,标签为11(从0到10)

如何塑造以下 Keras 模型以满足我的 Dataset.What 我应该输入的值?

from keras.models import Sequential
from keras.layers import LSTM, Dense
from keras.optimizers import SGD
import numpy as np
data_dim = ?
timesteps = ?
num_classes = ?
batch_size = ?
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model = Sequential()
model.add(LSTM(32, return_sequences=True, stateful=True,batch_input_shape=
(batch_size, timesteps, data_dim)))
model.add(LSTM(32, return_sequences=True, stateful=True))
model.add(LSTM(32, stateful=True))
model.add(Dense(?, activation='softmax'))
model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd', 
metrics=['accuracy'])
model.fit(train_X_arr, train_y_arr,batch_size=batch_size, epochs=epochs, 
 shuffle=False,validation_data=(test_X_arr, test_y_arr))

感谢您的帮助,在此先致谢

您想做的是:

from keras.models import Sequential
from keras.layers import LSTM, Dense
from keras.optimizers import SGD
import numpy as np
data_dim = 1 # EACH TIMESTAMP IS SCALAR SO SHAPE=1
timesteps = 6 # EACH EXAMPLE CONTAINS 6 TIMESTAMPS
num_classes = 1 # EACH LABEL IS ONE NUMBER SO SHAPE=1
batch_size = 1 # TAKE SIZE THAT CAN DIVIDE THE NUMBER OF EXAMPLES IN THE TRAIN DATA. THE HIGHER THE BATCH SIZE THE BETTER!
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model = Sequential()
model.add(LSTM(32, return_sequences=True, stateful=True,batch_input_shape=
(batch_size, timesteps, data_dim)))
model.add(LSTM(32, return_sequences=True, stateful=True))
model.add(LSTM(32, stateful=True))
model.add(Dense(1, activation='softmax')) # AT THE END YOU WANT ONE VALUE (LIKE THE LABELS) -> SO DENSE SHOULD OUTPUT 1 NODE
model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd', 
metrics=['accuracy'])
model.fit(train_X_arr, train_y_arr,batch_size=batch_size, epochs=epochs, 
 shuffle=False,validation_data=(test_X_arr, test_y_arr))

就是这样。

编辑:此外,确保将火车数据重塑为:(1795575, 6,1) -> 1795575 个示例,每个示例有 6 个时间戳,每个时间戳都是标量。
您可以使用 np.expand_dims(train_data,-1) 轻松实现。