首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >3类标号作为分类问题的LSTM模型

3类标号作为分类问题的LSTM模型
EN

Stack Overflow用户
提问于 2020-06-21 01:47:53
回答 1查看 1.5K关注 0票数 1

我的问题是预测输出有3个类标签,假设我在我的数据集中有20000个样本,每个样本与标签(0,1,2)相关联。因为这是多类分类问题。

我只能将输入作为( 0,1,2)的标签输入到网络中,并根据标签进行预测。提供给网络的数据是否足以学习和预测输出?

请帮我处理你的意见。

代码语言:javascript
运行
复制
# Below is the code
X_train, X_test, y_train, y_test = train_test_split(values_train[:, 0], 
                                                    values_train[:, 1], 
                                                    test_size=0.25, 
                                                    random_state=42)
print(" X Training Set size is",X_train.shape )
print(" y Training Set size is",y_train.shape  )
print(" X Test Set size is",X_test.shape)
print(" y Test Set size is",y_test.shape )
代码语言:javascript
运行
复制
'X Training Set size is (165081,)'
'y Training Set size is (165081,)'
'X Test Set size is (55028,)'
'y Test Set size is (55028,)'
代码语言:javascript
运行
复制
# convert to LSTM friendly format
X_train = X_train.reshape(len(X_train),1, 1)
X_test = X_test.reshape(len(X_test),1,1)
print(X_train.shape, X_test.shape)
代码语言:javascript
运行
复制
(165081, 1, 1) (55028, 1, 1)
代码语言:javascript
运行
复制
# configure network
n_batch = 1
n_epoch = 100
n_neurons = 10
from keras.optimizers import SGD
opt = SGD(lr=0.01)
# design network
model = Sequential()
model.add(LSTM(n_neurons, batch_input_shape=(n_batch, X_train.shape[1], 
                                             X_train.shape[2]), 
                                             stateful=True))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
# fit network
for i in range(n_epoch):
    model.fit(X_train, y_train ,validation_data=(X_test, y_test), 
              epochs=1, batch_size=n_batch, verbose=1, shuffle= False)
    model.reset_states()

df_actual = []
dp_predict = []
for i in range(len(X_test)):
    testX,testy = X_test[i],y_test[i]
    testX = testX.reshape(1, 1, 1)
    yhat = model.predict(testX, batch_size=1)
    df_actual.append(testy)
    dp_predict.append(yhat)
    print('>Actual =%.1f, Predicted=%.1f' % (testy, yhat))

在这个模型中,我无法得到正确的预测。

更新:

请在154076份样本上找到以下验证精度和培训精度,并对66033份样本进行验证。

代码语言:javascript
运行
复制
Epoch 1/5
154076/154076 [==============================] - 289s 2ms/step - loss: 1.0033 - accuracy: 0.3816 - val_loss: 1.0018 - val_accuracy: 0.4286
Epoch 2/5
154076/154076 [==============================] - 291s 2ms/step - loss: 1.0021 - accuracy: 0.3817 - val_loss: 1.0020 - val_accuracy: 0.4286
Epoch 3/5
154076/154076 [==============================] - 293s 2ms/step - loss: 1.0018 - accuracy: 0.3804 - val_loss: 1.0014 - val_accuracy: 0.4286
Epoch 4/5
154076/154076 [==============================] - 290s 2ms/step - loss: 1.0016 - accuracy: 0.3812 - val_loss: 1.0012 - val_accuracy: 0.4286
Epoch 5/5
154076/154076 [==============================] - 290s 2ms/step - loss: 1.0015 - accuracy: 0.3814 - val_loss: 1.0012 - val_accuracy: 0.4286

有人能告诉我什么是可以改进的吗?

注意:-我已经用MinMaxScalar规范了输入数据,并使用了缩放的数据,但是输出没有变化。

EN

回答 1

Stack Overflow用户

发布于 2020-06-21 04:40:37

类标签是分类类型的。神经网络不能学习分类数据。你必须用keras.utils.to_categorical对它进行一次热编码。

代码语言:javascript
运行
复制
x = values_train[:, 0]
y = values_train[:, 1]
y = keras.utils.to_categorical(y)
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=42)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62493599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档