gpt4 book ai didi

machine-learning - 是否可以使用 STATEFUL Recurrent NN (LSTM) 进行分类

转载 作者:行者123 更新时间:2023-11-30 09:07:58 26 4
gpt4 key购买 nike

我有一个包含 50,000(二进制)样本的数据集 C,每个样本为 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 是否可以用于分类,或者我的代码可能缺少某些内容或者是错误的。请问代码是否有遗漏或错误,以提高准确性。如有任何帮助或建议,我们将不胜感激。

最佳答案

当您只有一个输出单元时,您不能使用 softmax 作为输出,因为它始终会向您输出常量值 1。您需要将输出激活更改为 sigmoid 或将输出单元数设置为 2 并将损失设置为 categorical_crossentropy。我建议使用第一个选项。

关于machine-learning - 是否可以使用 STATEFUL Recurrent NN (LSTM) 进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47241622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com