【发布时间】:2018-04-24 19:04:40
【问题描述】:
我有一个 C 的数据集 50,000(二进制)样本每个 128 特征。类标签也是二进制1 或-1。例如,一个样本看起来像这样[1,0,0,0,1,0, .... , 0,1] [-1]。我的目标是根据二进制类(即 1 或 -1)对样本进行分类。我想尝试使用 Recurrent 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 是否可以用于分类,或者我的代码可能缺少某些内容或错误。好心,我想知道代码是否有遗漏或错误以提高准确性。任何帮助或建议表示赞赏。
【问题讨论】:
标签: machine-learning keras classification lstm recurrent-neural-network