LSTM时序预测loss值为nan

在这里插入图片描述
当loss 显示为 nan时,首先检查训练集中是否存在nan值,可以用np.isnan()方法进行查看,如果数据集没问题再检查下损失函数会否适合当前模型,

def trainModel(train_X, train_Y):
    """
    trainX,trainY: 训练LSTM模型所需要的数据
    """
    model = Sequential()
    model.add(LSTM(units=50, activation='relu',
                   input_shape=(train_X.shape[1], train_X.shape[2]),
                   return_sequences=True))
    model.add(Dropout(0.2))
    model.add(LSTM(units=50, activation='relu', return_sequences=True))
    model.add(Dropout(0.2))
    model.add(LSTM(units=50, return_sequences=True))
    model.add(Dropout(0.2))
    model.add(LSTM(units=32))
    model.add(Dropout(0.2))
    model.add(Dense(train_Y.shape[1], activation='linear'))
    model.compile(loss='mse', optimizer='adam', loss_weights=0.00001)
    model.fit(train_X, train_Y, epochs=20, batch_size=128, verbose=1)
    return model

最后还可以尝试更改学习率来查看loss值情况,通常学习率的取值有:0.1,0.01, 0.001, 0.00001

以下是一个使用LSTM(长短时记忆网络)预测共享单车需求的Python代码示例: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import Dense, LSTM # 读取数据 data = pd.read_csv('bike-sharing.csv', index_col='datetime', parse_dates=['datetime']) data.drop('casual', axis=1, inplace=True) data.drop('registered', axis=1, inplace=True) # 数据归一化 scaler = MinMaxScaler(feature_range=(0, 1)) scaled_data = scaler.fit_transform(data) # 划分训练集和测试集 train_size = int(len(scaled_data) * 0.8) test_size = len(scaled_data) - train_size train_data, test_data = scaled_data[0:train_size,:], scaled_data[train_size:len(scaled_data),:] # 创建时序数据 def create_dataset(dataset, look_back=1): dataX, dataY = [], [] for i in range(len(dataset) - look_back -1): a = dataset[i:(i+look_back), 0] dataX.append(a) dataY.append(dataset[i + look_back, 0]) return np.array(dataX), np.array(dataY) look_back = 12 trainX, trainY = create_dataset(train_data, look_back) testX, testY = create_dataset(test_data, look_back) # 转换成LSTM的输入格式 [样本数, 时间步, 特征数] trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1])) testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1])) # 构建LSTM模型 model = Sequential() model.add(LSTM(50, input_shape=(1, look_back))) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') # 训练模型 model.fit(trainX, trainY, epochs=50, batch_size=72, verbose=2) # 预测数据 train_predict = model.predict(trainX) test_predict = model.predict(testX) # 反归一化 train_predict = scaler.inverse_transform(train_predict) trainY = scaler.inverse_transform([trainY]) test_predict = scaler.inverse_transform(test_predict) testY = scaler.inverse_transform([testY]) # 计算RMSE误差 train_score = np.sqrt(mean_squared_error(trainY[0], train_predict[:,0])) test_score = np.sqrt(mean_squared_error(testY[0], test_predict[:,0])) print('Train Score: %.2f RMSE' % (train_score)) print('Test Score: %.2f RMSE' % (test_score)) # 可视化结果 train_predict_plot = np.empty_like(scaled_data) train_predict_plot[:, :] = np.nan train_predict_plot[look_back:len(train_predict)+look_back, :] = train_predict test_predict_plot = np.empty_like(scaled_data) test_predict_plot[:, :] = np.nan test_predict_plot[len(train_predict)+(look_back*2)+1:len(scaled_data)-1, :] = test_predict plt.plot(scaler.inverse_transform(scaled_data)) plt.plot(train_predict_plot) plt.plot(test_predict_plot) plt.show() ``` 在这个示例中,我们使用了一个LSTM模型来预测未来几个小时的共享单车需求。我们首先读取数据,将数据归一化,然后将数据集划分为训练集和测试集。接下来,我们创建时序数据并将其转换为LSTM的输入格式。然后,我们使用Keras创建一个LSTM模型,将其拟合到训练数据中,并使用该模型预测测试数据。最后,我们计算预测结果的RMSE误差,并将结果可视化。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值