我是深度学习和一般机器学习的新手。我试图通过将 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)
最佳答案
准确性不是回归问题的有效指标。 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/