使用Keras和x27培训分类RNN;LSTM层

使用Keras和x27培训分类RNN;LSTM层,keras,lstm,recurrent-neural-network,Keras,Lstm,Recurrent Neural Network,我有来自四个不同身体传感器的顺序数据,并希望使用Keras API创建和训练一个递归神经网络(RNN),以使用这些参数区分四种情绪/状态 我的数据集如下所示: (x_train, y_train), (x_test, y_test) (CuDNN)LSTM (Input) Dropout BatchNormalization (CuDNN)LSTM Dropout BatchNormalization Dense Dropout Dense(Output) 其中,x_列和x_测试为四组

我有来自四个不同身体传感器的顺序数据,并希望使用Keras API创建和训练一个递归神经网络(RNN),以使用这些参数区分四种情绪/状态

我的数据集如下所示:

(x_train, y_train), (x_test, y_test)
(CuDNN)LSTM (Input)
Dropout
BatchNormalization

(CuDNN)LSTM
Dropout
BatchNormalization

Dense
Dropout

Dense(Output)
其中,x_列和x_测试为四组形状
(传感器1、传感器2、传感器3、传感器4)
。y_-train和y_-test用范围为[0,1,2,3]的整数标记各自的对应项

我首先生成class_权重,因为不同的情绪在数据之间分布不均匀

我想实现这样一个神经网络:

(x_train, y_train), (x_test, y_test)
(CuDNN)LSTM (Input)
Dropout
BatchNormalization

(CuDNN)LSTM
Dropout
BatchNormalization

Dense
Dropout

Dense(Output)
我尝试了很多不同的方法:

使用有状态RNN(据我所知,这是本用例的最佳实践),您需要在第一层(LSTM)中指定一个批处理输入大小参数

这个

运行到一个
tensorflow.python.framework.errors\u impl.invalidargumeinterror:Invalid input\u h shape:[11024,32][1926,32]
使用fit()-function。[1,926,32]中的“926”似乎在某种程度上取决于我输入数据的大小,并且似乎总是小于批处理大小(可能是模数?),但我不知道怎么做

这是我的第二次尝试,使用了更简单的体系结构:

model = Sequential()

model.add(CuDNNLSTM(128, input_shape=x_train[0].shape, return_sequences=True, name="LSTM_1"))
model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add(CuDNNLSTM(128, name="LSTM_2"))
model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add(Dense(32, activation="relu"))
model.add(Dropout(0.2))

model.add(Dense(classes, activation="softmax"))
这种更简单的方法,使用非状态LSTM层开始(甚至完成)训练,但既不能使用ModelCheckpoints,也不能使用model.save()方法进行计算或保存,我还怀疑它的准确性(这是最终的训练结果:
损失:1.2050-精度:0.5823-val_损失:1.1452-val_精度:0.0000e+00

当试图保存模型时,我得到以下信息:
ValueError:Input 0与layer sequential不兼容:expected shape=(None,None,4),found shape=[None,4,1]
当试图在求值之前保存它时:
ValueError:layer有2个状态,但传递了0个初始状态。
(所讨论的层是“LSTM\u 1”)

我希望得到一个深入的回答,而不仅仅是一些代码片段,因为我(正如您可能注意到的)对这个主题总体上是非常陌生的,特别是Keras,如果需要的话,我很乐意提供更多的代码或信息