tensorflow / keras LSTM训练时候nan情况

当跑tf训练的时候,有时候的loss会成为nan,一般来说,可能性会有

<1> Activation Function: 当activation function为relu的时候,有可能会导致输出比较大,这样在取e的x方的时候,会把整个数字弄的特别大,然后会出nan。相对来说,tanh, sigmoid的值域是在[-1,1] / [0,1]的范围之内。这两个函数不会出现nan的情况。

但是相对于sigmoid, sgd函数来说,relu函数训练速度比较快

<2> 数据缺失。这个是很显而易见的事情。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用LSTM模型进行径流预测的Python代码示例。在这个示例中,我们使用了Keras深度学习框架: ```python import numpy as np import pandas as pd from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dropout, Dense # 导入数据 data = pd.read_csv('flow.csv') flow = np.array(data['Flow']) # 数据预处理 look_back = 5 # 时间步长 train_size = int(len(flow) * 0.67) # 训练集大小 # 创建训练集和测试集 train_flow, test_flow = flow[0:train_size], flow[train_size:len(flow)] trainX, trainY = [], [] testX, testY = [], [] for i in range(len(train_flow)-look_back-1): a = train_flow[i:(i+look_back)] trainX.append(a) trainY.append(train_flow[i + look_back]) for i in range(len(test_flow)-look_back-1): a = test_flow[i:(i+look_back)] testX.append(a) testY.append(test_flow[i + look_back]) # 转换为numpy数组 trainX = np.array(trainX) trainY = np.array(trainY) testX = np.array(testX) testY = np.array(testY) # 调整输入形状 trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1)) testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1)) # 创建模型 model = Sequential() model.add(LSTM(50, input_shape=(look_back, 1))) model.add(Dropout(0.2)) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') # 训练模型 model.fit(trainX, trainY, epochs=100, batch_size=32, verbose=2) # 使用模型进行预测 trainPredict = model.predict(trainX) testPredict = model.predict(testX) # 输出预测结果 trainPredictPlot = np.empty_like(flow) trainPredictPlot[:] = np.nan trainPredictPlot[look_back:len(trainPredict)+look_back] = trainPredict[:,0] testPredictPlot = np.empty_like(flow) testPredictPlot[:] = np.nan testPredictPlot[len(trainPredict)+(look_back*2)+1:len(flow)-1] = testPredict[:,0] ``` 在这个示例中,我们首先导入径流数据并进行一些数据预处理。我们使用时间步长为5,将数据分成训练集和测试集。我们使用LSTM层来构建模型,并使用均方误差作为损失函数进行训练。在训练模型后,我们使用模型进行预测,并输出预测结果。 请注意,这只是一个非常简单的示例,实际的LSTM模型可能需要更复杂的网络结构和更多的数据预处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值