【问题标题】:ANN regression NaN loss valuesANN回归NaN损失值
【发布时间】:2021-03-26 04:56:41
【问题描述】:

我正在尝试训练 ANN 执行回归。该数据集由 7 个参数的约 10k 数据点组成。我正在使用this basic regression example from Tensorflow.

但是,在训练期间,损失值从第一个 epoch 到最后一个 epoch 返回 NaN 值。我尝试了不同的正则化技术(归一化、dropout、L1/L2 权重正则化),但均未成功。

关于这可能是什么原因以及如何解决的任何建议?

下面是一些有用的code-sn-ps和图片:

型号

def build_and_compile_model(norm):
  model = keras.Sequential([
      norm,
      layers.Dense(10, activation='relu', kernel_regularizer=regularizers.l1_l2(l1=1e-5, l2=1e-4),
    bias_regularizer=regularizers.l2(1e-4),
    activity_regularizer=regularizers.l2(1e-5)),
      layers.Dense(1)
  ])
  model.add(Dropout(0.2, input_shape=(6,)))
  model.compile(loss='mean_absolute_error',
                optimizer=tf.keras.optimizers.Adam(0.0001))
  return model

dnn_model = build_and_compile_model(normalizer)
dnn_model.summary()

培训

%%time
history = dnn_model.fit(
    train_features, train_labels,
    validation_split=0.2,
    verbose=0, epochs=100)

hist = pd.DataFrame(history.history)
hist['epoch'] = history.epoch
print(hist.head())
print(hist.tail())

# PRINT:
loss  val_loss  epoch
0   NaN       NaN      0
1   NaN       NaN      1
2   NaN       NaN      2
3   NaN       NaN      3
4   NaN       NaN      4
    loss  val_loss  epoch
95   NaN       NaN     95
96   NaN       NaN     96
97   NaN       NaN     97
98   NaN       NaN     98
99   NaN       NaN     99
Wall time: 26.1 s

数据检查

最后一行是输出参数。

【问题讨论】:

  • 您的数据集中有 inf (np.inf) 值吗?
  • 检查您的数据框中是否没有任何 NaN
  • NaN 表示您的损失已成为无限。尝试降低您的学习率(例如 0.000001 甚至为零),这样您就可以查看您的模型是否以糟糕的方式学习或者问题出在其他问题上。作为一个建议,我说删除 norm 层和正则化器并尝试最简单的网络版本,直到它工作为止
  • @Yefet 我尝试使用 dataset.replace([np.inf, -np.inf], np.nan) 将所有 inf 值替换为 NaN 值,但没有成功。但是,它在使用 dataset.dropna(inplace=True) 删除所有 NaN 值时也有效。不过,这会显着减少数据集。 NaN 值真的会以这种方式影响训练吗?
  • @BDouchet 见上面的评论。它在删除所有 NaN 值时有效,但它会将数据集从 10k 数据点显着减少到 3k 数据点,从而导致训练效果不佳。我想我必须尝试训练参数才能让它发挥作用!

标签: tensorflow keras deep-learning neural-network regression


【解决方案1】:

我认为问题在于您在 Dense(1) 层之后添加了一个 Dropout 层。 这使得 dropout 成为模型的顶层。删除它,它应该可以工作

【讨论】:

  • 我尝试了许多不同的模型配置,但均未成功。有无 dropout、隐藏层中不同数量的神经元等。
猜你喜欢
  • 2021-01-13
  • 2020-11-21
  • 2018-11-07
  • 1970-01-01
  • 2019-05-07
  • 2016-09-10
  • 2020-12-30
  • 2019-10-14
  • 2020-02-08
相关资源
最近更新 更多