首页 > 解决方案 > 使用 LSTM 时输入包含 NaN

问题描述

我正在尝试构建一个单变量编码器-解码器 LSTM 模型。我一次又一次地得到这个错误:

ValueError:输入包含 NaN、无穷大或对于 dtype('float32') 来说太大的值。

我已经搜索并阅读了其他询问相同错误的帖子,但是,我确信数据没有任何 nan 值。

由于 LSTM 隐藏计算导致的 nan 值让我确定的是:

我为每个时代做了一个循环来调用model.fit和打印历史。

for j in range(numEpoch):
  history = model.fit(trX, targetTRAIN, epochs=1, batch_size=batchSize, verbose=0, shuffle=False, validation_split=valdSplit)
  print(history.history)

它运行良好,直到大约numEpoch= 610(对不起,我忘记了确切的数字),然后它开始显示nan为验证损失。

这是我的模型定义:

numEpoch = 2000
batchSize = 1
actFunc = 'relu'
valdSplit=0.1
dropOutRate=0.2
optimizer = SGD(lr=0.01, momentum=0.9)


model = Sequential()
randSeed = randSeed + 1
kernelInitializer = RandomNormal(seed=randSeed)
model.add(LSTM(30, batch_input_shape=(batchSize, timeStep, numFeat), activation=actFunc, kernel_initializer=kernelInitializer, dropout=dropOutRate,stateful=True , return_sequences=True))
model.add(Dropout(dropOutRate))
model.add(LSTM(20,  kernel_initializer=kernelInitializer, stateful=False ,activation=actFunc, return_sequences=False))
model.add(Dropout(dropOutRate))
randSeed = randSeed + 1
kernelInitializer = RandomNormal(seed=randSeed)
model.add(Dense(numFeat, kernel_initializer=kernelInitializer, activation='linear'))
model.compile(loss='mean_squared_error', optimizer=optimizer, metrics=['accuracy'])

Train_X形状为 (362, 3, 27)

如果需要,我很乐意提供更多详细信息。

标签: pythondeep-learningtime-serieslstmencoder-decoder

解决方案


推荐阅读