我是深度学习和机器学习的新手。我试图通过将8个要素中的每个要素传递到5层网络并对价格输出进行培训来使用“加州住房价格”数据集。我使用MSE损失和准确性作为2000个时期的指标。损耗开始时可以理解地很大,在一定程度上减小并停留在相同的值附近。在2000个历元中,精度都固定为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)
答案 0 :(得分:4)
精度不是回归问题的有效指标。 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
答案 1 :(得分:4)
您正在这里解决回归问题,因此准确性不能用作评估模型的指标。相反,您可以使用mae
,mape
和mse
之类的绩效指标,它们更适合评估预测连续目标变量的模型。
此外,我不会说您的模型没有收敛,如果您看到损失在不断减少,那么收敛就没有问题,您只需要将评估方法更改为我上面提到的内容即可
有关如何实施这些绩效指标的更多详细信息,请参考How to Use Metrics for Deep Learning with Keras in Python或Usage of metrics。
希望这会有所帮助!