Machine learning 使用有状态递归神经网络(LSTM)进行分类可以吗

Machine learning 使用有状态递归神经网络(LSTM)进行分类可以吗,machine-learning,keras,classification,lstm,recurrent-neural-network,Machine Learning,Keras,Classification,Lstm,Recurrent Neural Network,我有一个数据集C,共50000个128个特征的(二进制)样本。类标签也是二进制的1或-1。例如,一个示例看起来像这样[1,0,0,0,1,0,…,0,1][1]。我的目标是根据二进制类(即1或-1)对样本进行分类。我想尝试使用递归的LSTM生成一个好的分类模型。为此,我使用Keras库编写了以下代码: tr_C, ts_C, tr_r, ts_r = train_test_split(C, r, train_size=.8) batch_size = 200 print('>>&g

我有一个数据集
C
,共
50000个
128个
特征的(二进制)样本。类标签也是二进制的
1
-1
。例如,一个示例看起来像这样
[1,0,0,0,1,0,…,0,1][1]
。我的目标是根据二进制类(即1或-1)对样本进行分类。我想尝试使用递归的
LSTM
生成一个好的分类模型。为此,我使用
Keras
库编写了以下代码:

tr_C, ts_C, tr_r, ts_r = train_test_split(C, r, train_size=.8)
batch_size = 200

print('>>> Build STATEFUL model...')
model = Sequential()
model.add(LSTM(128, batch_input_shape=(batch_size, C.shape[1], C.shape[2]), return_sequences=False, stateful=True))
model.add(Dense(1, activation='softmax'))

print('>>> Training...')
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(tr_C, tr_r,
          batch_size=batch_size, epochs=1, shuffle=True,
          validation_data=(ts_C, ts_r))

然而,我的准确率很差,不超过55%。我试图改变激活函数和损失函数,希望提高精度,但没有任何效果。令人惊讶的是,当我使用多层感知器时,我得到了大约97%的非常好的准确率。因此,我开始质疑LSTM是否可以用于分类,或者我这里的代码是否缺少某些内容,或者它是错误的。我想知道代码是否有遗漏或错误,以提高准确性。感谢您的帮助或建议。

当您只有一个输出单元时,您不能将
softmax
用作输出,因为它将始终向您输出
1
的常量值。您需要将输出激活更改为
sigmoid
,或将输出单位编号设置为
2
,将损耗设置为
category\u crossentropy
。我建议第一种选择。

谢谢您的回复。非常感谢