训练损失在keras LSTM中是nan

yiytaume  于 2024-01-08  发布在  其他
关注(0)|答案(2)|浏览(155)

我在google colab中使用GPU调用了这段代码来创建一个多层LSTM。它用于时间序列预测。

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM, LSTM, BatchNormalization
from keras.optimizers import SGD
model = Sequential()
model.add(LSTM(units = 50, activation = 'relu', return_sequences=True, input_shape= 
(1,len(FeaturesDataFrame.columns))))
model.add(Dropout(0.2))
model.add(LSTM(3, return_sequences=False))
model.add(Dense(1))
opt = SGD(lr=0.01, momentum=0.9, clipvalue=5.0)
model.compile(loss='mean_squared_error', optimizer=opt)

字符串
请注意,我已经使用了梯度裁剪。但是,当我训练这个模型时,它仍然返回nan作为训练损失:

history = model.fit(X_t_reshaped, train_labels, epochs=20, batch_size=96, verbose=2)


这就是结果

Epoch 1/20
316/316 - 2s - loss: nan 
Epoch 2/20
316/316 - 1s - loss: nan 
Epoch 3/20
316/316 - 1s - loss: nan
Epoch 4/20
316/316 - 1s - loss: nan
Epoch 5/20
316/316 - 1s - loss: nan
Epoch 6/20
316/316 - 1s - loss: nan
Epoch 7/20
316/316 - 1s - loss: nan 
Epoch 8/20
316/316 - 1s - loss: nan 
Epoch 9/20
316/316 - 1s - loss: nan 
Epoch 10/20 
316/316 - 1s - loss: nan
Epoch 11/20
316/316 - 1s - loss: nan
Epoch 12/20
316/316 - 1s - loss: nan
Epoch 13/20
316/316 - 1s - loss: nan
Epoch 14/20
316/316 - 1s - loss: nan
Epoch 15/20
316/316 - 1s - loss: nan 
Epoch 16/20
316/316 - 1s - loss: nan
Epoch 17/20
316/316 - 1s - loss: nan
Epoch 18/20
316/316 - 1s - loss: nan
Epoch 19/20
316/316 - 1s - loss: nan
Epoch 20/20
316/316 - 1s - loss: nan

kmbjn2e3

kmbjn2e31#

我比Keras更熟悉使用PyTorch。然而,我仍然建议做几件事:
1.检查您的数据。确保您传递到模型中的数据中没有缺失或空值。这是最有可能的罪魁祸首。单个空值将导致损失为NaN。
1.你可以尝试降低学习率(0.001或更小)和/或删除梯度裁剪。我以前实际上已经让梯度贡献成为NaN损失的原因。
1.尝试缩放你的数据(尽管未缩放的数据通常会导致无限的损失,而不是NaN损失)。使用StandardScaler或sklearn中的其他缩放器之一。
如果所有这些都失败了,那么我会尝试将一些非常简单的虚拟数据传递到模型中,看看问题是否仍然存在。然后你就会知道这是代码问题还是数据问题。希望这对你有帮助,如果你有问题,请随时提问。

wd2eg0qa

wd2eg0qa2#

除了NAN或NA之外,检查是否有任何输入和输出向量不全为零。

相关问题