我试着训练一个神经网络来进行回归。该数据集由7个参数的~10k数据点组成。我用的是这是来自Tensorflow的基本回归示例。
然而,在训练期间,损失值从第一个时代返回到最后一个时期的NaN值。我尝试过不同的正则化技术(规范化、辍学、L1/L2加权正则化),但都没有成功。
对于这一问题的根源以及如何解决,有什么建议吗?
下面是一些有用的代码片段和图像:
模型
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数据检查
最后一行是输出参数。

发布于 2020-12-15 16:18:04
我认为问题是,在密集的(1)层之后添加了一个Dropout层。这使得退出成为你的模型的顶层。移除它,它就会起作用
https://stackoverflow.com/questions/65307881
复制相似问题