首页 文章

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

提问于
浏览
0

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

如何塑造以下Keras模型以满足我的数据集 . 我应该选择哪些值?

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))

我感谢您的帮助,并提前致谢

1 回答

  • 0

    你想做的是:

    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)轻松实现 .

相关问题