keras 历元损失、平均绝对误差和验证损失是机器学习时间序列天气预测的“nan

anauzrmj  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(149)

我正在为另一个数据集应用here中的时间序列建模。对于链接中的给定数据集,所有损失(即损失、平均绝对误差、验证损失、验证的平均绝对误差;最后两个损失并不是针对所有的历元模型),在历元中计算的损失值不为零,而当我改变数据集时,所有的损失值都为nan。与这里使用的数据集相比,我使用的数据集具有大约一半的读数数量。我的数据集具有以15分钟间隔同时从多个位置(40个奇数位置)记录的读数。
所有程序的培训函数定义为

MAX_EPOCHS = 20

def compile_and_fit(model, window, patience=2):
  early_stopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss',
                                                    patience=patience,
                                                    mode='min')

  model.compile(loss=tf.keras.losses.MeanSquaredError(),
                optimizer=tf.keras.optimizers.Adam(),
                metrics=[tf.keras.metrics.MeanAbsoluteError()])

  history = model.fit(window.train, epochs=MAX_EPOCHS,
                      validation_data=window.val,
                      callbacks=[early_stopping])
  return history

我还尝试过通过将model.compile更改为

opt = tf.keras.optimizers.Adam(0.001, clipnorm=1.)
  model.compile(loss=["mse", "mse"], loss_weights=[0.9, 0.1], optimizer=opt)

我的数据集的批大小是4654,而给定笔记本中的数据集的批大小是1534。
如何解决这一问题才能获得非零损失?
此外,我无法获得除基线模型之外的所有模型的预测。

iyzzxitl

iyzzxitl1#

使用此代码片段将NaN更改为0,然后验证这一点,得到丢失和验证丢失的值。

df.replace(np.nan, 0.0, inplace=True) 
df.isnull().values.any()#check if nan are still there

PS:感谢评论中的帮助!

相关问题