我怎样才能摆脱NaN的预测和损失?带Keras的LSTM

2024-04-25 20:27:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在学习使用一个非常简单的数据集预测时间序列,该数据集有8列(所有数字),总共795个样本用于训练,89个样本用于测试(无NaN值)

数据已通过以下方式标准化:

scaler = MinMaxScaler(feature_range=(0,1))
scaled_data = scaler.fit_transform(dataset_to_train)

后来,在将目标与特征分离后,我使用Keras创建了一个LSTM(x_序列是缩放的,没有目标列):

lstm_net = Sequential()
lstm_net.add(LSTM(20, input_shape=(x_train.shape[1],1), return_sequences=True))
lstm_net.add(LSTM(10,return_sequences=False))
lstm_net.add(Dense(5))
lstm_net.add(Dense(1))

对于编译(已经尝试了其他编译器,如adam或rmsprop,但没有任何更改):

lstm_net.compile(optimizer = 'sgd', loss = 'mean_squared_error', metrics=['accuracy'])

对于配件:

lstm_net.fit(x_train,y_train, epochs=50 , batch_size=1)

它表明:

Epoch 30/50
795/795 [==============================] - 2s 2ms/step - loss: nan - accuracy: 0.0474

它的精度很低,而且一直都有损耗

要获得最终预测,请执行以下操作:

predictions = lstm_net.predict(x_test)
print(predictions)

它会打印出整个[nan]数组

关于如何解决这个问题,有什么建议吗?我尝试了我在其他帖子或论坛上找到的所有东西,大多数人都指出这可能是由于梯度问题,甚至尝试了不同的定标器,但没有结果,所以我迷路了