培训损失在keras LSTM中为nan

培训损失在keras LSTM中为nan,keras,deep-learning,time-series,lstm,Keras,Deep Learning,Time Series,Lstm,我用GPU在谷歌colab中编译了这段代码,以创建一个多层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 De

我用GPU在谷歌colab中编译了这段代码,以创建一个多层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)
这就是结果


我比Keras更熟悉PyTorch的工作。但是,我仍然建议您做以下几件事:

  • 检查您的数据。确保传递到模型中的数据中没有缺失值或空值。这是最有可能的罪魁祸首。单个空值将导致丢失为NaN

  • 您可以尝试降低学习速率(0.001或更小)和/或删除渐变剪裁。事实上,我以前也有过导致NaN流失的原因

  • 尝试缩放数据(尽管未缩放的数据通常会导致无限的损失,而不是丢失)。使用StandardScaler或sklearn中的其他定标器之一


  • 如果所有这些都失败了,那么我会尝试将一些非常简单的虚拟数据传递到模型中,看看问题是否仍然存在。然后您将知道这是代码问题还是数据问题。希望这对您有所帮助,如果您有问题,请随时提问。

    我比Keras更熟悉PyTorch的工作。但是,我仍然建议您做以下几件事:

  • 检查您的数据。确保传递到模型中的数据中没有缺失值或空值。这是最有可能的罪魁祸首。单个空值将导致丢失为NaN

  • 您可以尝试降低学习速率(0.001或更小)和/或删除渐变剪裁。事实上,我以前也有过导致NaN流失的原因

  • 尝试缩放数据(尽管未缩放的数据通常会导致无限的损失,而不是丢失)。使用StandardScaler或sklearn中的其他定标器之一


  • 如果所有这些都失败了,那么我会尝试将一些非常简单的虚拟数据传递到模型中,看看问题是否仍然存在。然后您将知道这是代码问题还是数据问题。希望这对你有所帮助,如果你有问题,可以随意提问。

    尝试低得多的学习率,如1e-4或1e-5,看看是否有帮助。如果是这样,您可以尝试调整LR和其他参数,看看是否可以避免爆炸。@HoOman为什么要使用ReLU,您是否以某种方式缩放了输入?@MustafaAydın我看到这种激活很普遍。对于时间序列预测应用程序,您有什么建议吗?尝试低得多的学习率,如1e-4或1e-5,看看是否有帮助。如果是这样,您可以尝试调整LR和其他参数,看看是否可以避免爆炸。@HoOman为什么要使用ReLU,您是否以某种方式缩放了输入?@MustafaAydın我看到这种激活很普遍。您对时间序列预测应用有什么建议吗?谢谢。这是因为培训数据中存在Nan值,谢谢。这是由于训练数据中存在Nan值
    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