tensorflow - 为什么深度学习模型没有与加州房价数据收敛?

标签 tensorflow machine-learning keras neural-network deep-learning

我是深度学习和一般机器学习的新手。我试图通过将 8 个特征中的每一个传递到 5 层网络并对价格输出进行训练来处理加州房价数据集。我使用 MSE 损失和准确性作为 2000 个时期的指标。损失一开始就很大,可以理解,减少到一定程度后就会陷入相同的值。在所有 2000 个 epoch 中,准确率都停留在 0。

我在网上看到了一些解决方案,这些解决方案可以执行诸如将房间总数除以家庭数量之类的操作,以找到每个家庭的平均房间数。我发现进行此类特征工程将有助于模型更快地收敛,但我本来希望模型完全不需要特征工程即可收敛。

据我了解,神经网络是函数逼近器,它构建从数据集的输入到输出的函数。理想情况下,我希望它还能找到复杂的特征,例如在在线解决方案中手动计算的特征。我的这些期望有错吗?模型不收敛的原因是什么?

train_data = pd.read_csv('./sample_data/california_housing_train.csv', sep=',')
test_data = pd.read_csv('./sample_data/california_housing_test.csv', sep=',')

model = tf.keras.models.Sequential([
  layers.Dense(8),
  layers.Dense(5, activation=tf.nn.relu),  
  layers.Dense(7, activation=tf.nn.relu),  
  layers.Dense(5, activation=tf.nn.relu),
  layers.Dropout(0.2),
  layers.Dense(1)
])

model.compile(optimizer='adam', loss='mean_squared_error', shuffle=True, metrics=['accuracy'])

model.fit(train_data.values[:, 0:8], train_data.values[:, 8], epochs=2000)

输出 Output

最佳答案

准确性不是回归问题的有效指标。 What function defines accuracy in Keras when the loss is mean squared error (MSE)?

此外,请使用最小-最大或零均值/单位方差标准化对输入数据进行标准化。而且要学习的输出数据的范围(10,000的数量级)非常大,因此,您可以将输出值除以10,000(在预测期间您可以将该值乘回来)。这些变化将有助于网络更快地融合。网络的容量也可能需要增加。

数值数据的不同类型的标准化: https://developers.google.com/machine-learning/data-prep/transform/normalization

关于tensorflow - 为什么深度学习模型没有与加州房价数据收敛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56721196/

相关文章:

keras - Tensorflow 服务于预训练的 Keras ResNet50 模型,始终返回相同的预测

tensorflow - TF2.0 中 Keras 损失中 `sample_weight` 参数的奇怪形状要求

tensorflow - tf.keras 替换预训练 resnet50 中的下层

python - 如何将 Tensorflow BatchNormalization 与 GradientTape 结合使用?

python - 是否可以在不同的 Keras 回调中设置值?

image-processing - 全局池有什么作用?

tensorflow - 向 gcloud 提交训练作业时出错

machine-learning - 同时训练两个子图时如何处理梯度

c++ - std::function 有性能问题,如何避免?

machine-learning - 如何减去keras中的 channel 均值?