【问题标题】:Why isn't the deep learning model converging on California Housing Price data?为什么深度学习模型不与加州房价数据融合?
【发布时间】:2019-06-24 07:08:31
【问题描述】:

我是深度学习和一般机器学习的新手。我试图通过将 8 个特征中的每一个传递到 5 层网络并训练价格输出来处理加利福尼亚房价数据集。我使用 MSE 损失和准确度作为 2000 个 epoch 的指标。损失开始时可以理解的大,减少到一定程度并停留在相同的值附近。在 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)

输出

【问题讨论】:

  • 这听起来像是一个回归问题。您无法衡量准确性 - 只有错误。你能告诉我们你的训练成果吗?

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您在这里解决的是回归问题,因此准确度不能用作评估模型的指标。相反,您可以使用maemapemse 之类的性能度量,它们更适合评估预测连续目标变量的模型。

    此外,我不会说您的模型没有收敛,如果您查看它不断减少的损失,那么收敛没有问题,您只需将评估度量更改为我上面提到的东西.

    请参阅How to Use Metrics for Deep Learning with Keras in PythonUsage of metrics,了解有关如何实施这些绩效指标的更多详细信息。

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回答。是的,损失会下降到某个值,但随后会在相同值上下停滞不前。我明白了为什么我的准确率是 0,但是为什么损失没有继续减少呢?
    • 一切都在您的数据中。您需要对其进行标准化,因为特征之间的动态范围非常不同。看看另一个答案。
    • 您正试图预测我认为在非常高的范围内衡量的房价(我猜是 100,000 左右),您决定使用 mean_squared_error 来衡量您的损失,这非常对您测量变量的范围敏感。请参考(stackoverflow.com/questions/56689243/…)。或者只是尝试规范化您的输入,以便更好地了解正在发生的事情。
    猜你喜欢
    • 2020-11-22
    • 2019-10-29
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2018-10-27
    • 2023-02-01
    相关资源
    最近更新 更多