如何使用TensorFlow中的DNN模型预测Auto MPG数据集上的MPG值?
在这篇文章中,我们将会介绍如何使用TensorFlow中的DNN模型来预测Auto MPG数据集上的MPG值。这个数据集可以追溯到20世纪70年代,包含了美国多个汽车制造商发布的各种汽车的MPG值和其他属性。
更多Python教程,请阅读:Python 教程
获取数据集
首先,我们需要从TensorFlow的示例数据集中获取数据集。可以使用以下代码来获取这个数据集:
import tensorflow as tf
import pandas as pd
dataset_url = 'https://storage.googleapis.com/tf-datasets/tfds/proseline/1.0.0/auto_mpg'
dataset = tf.keras.utils.get_file("auto-mpg.data", dataset_url)
dataset_path = tf.keras.utils.get_file("auto-mpg.data", dataset_url)
column_names = ['MPG','Cylinders','Displacement','Horsepower','Weight',
'Acceleration', 'Model Year', 'Origin']
raw_dataset = pd.read_csv(dataset_path, names=column_names,
na_values = "?", comment='\t',
sep=" ", skipinitialspace=True)
dataset = raw_dataset.copy()
dataset.tail()
这个代码片段中,我们首先使用get_file
方法从URL地址获取到Auto MPG数据集。然后使用pd.read_csv
方法来将数据集转换成Pandas DataFrame格式,这将使得我们能够更加轻松地对数据集进行处理和分析。
数据集准备
数据集需要进行一些预处理才能用于训练和测试模型。首先,需要从原始数据集中丢弃部分数据,变成只有数值型数据:
dataset = dataset.dropna()
origin = dataset.pop('Origin')
dataset['USA'] = (origin == 1)*1.0
dataset['Europe'] = (origin == 2)*1.0
dataset['Japan'] = (origin == 3)*1.0
train_dataset = dataset.sample(frac=0.8,random_state=0)
test_dataset = dataset.drop(train_dataset.index)
接下来,我们需要将数据进行归一化处理。之所以进行归一化处理是因为在训练深度模型时,有些权重比较大或者不同特征的范围差异较大,这样使得训练难度变大,而归一化可以让所有数据都缩放到同一个范围内。在这里,我们将使用preprocessing.Normalization()
方法来进行归一化处理:
from tensorflow.keras import layers
from tensorflow.keras.layers.experimental import preprocessing
normalizer = preprocessing.Normalization()
normalizer.adapt(np.array(train_features))
构建DNN模型
接下来,我们需要构建一个DNN模型。可以使用以下代码来构建一个DNN模型:
def build_and_compile_model(norm):
model = keras.Sequential([
norm,
layers.Dense(64, activation='relu'),
layers.Dense(64, activation='relu'),
layers.Dense(1)
])
model.compile(loss='mean_absolute_error',
optimizer=tf.keras.optimizers.Adam(0.001))
return model
dnn_model = build_and_compile_model(normalizer)
dnn_model.summary()
这个模型包括了三个全连接层,其中包括两个包含64个神经元,激活函数为ReLU函数的隐藏层,和一个输出层。损失函数为均方误差损失函数,优化器为Adam优化器。
训练模型
接下来,我们将训练模型。可以使用以下代码来训练模型:
history = dnn_model.fit(
train_features, train_labels,
validation_split=0.2,
verbose=0, epochs=100)
模型评估
训练模型后,我们需要在测试集上进行评估。可以使用以下代码来评估模型:
test_results = {}
test_results['dnn_model'] = dnn_model.evaluate(
test#### 测试集上准确率的计算
现在我们来计算在测试集上的准确率。可以使用以下代码来计算:
```python
test_predictions = dnn_model.predict(test_features).flatten()
a = plt.axes(aspect='equal')
plt.scatter(test_labels, test_predictions)
plt.xlabel('True Values [MPG]')
plt.ylabel('Predictions [MPG]')
lims = [0, 50]
plt.xlim(lims)
plt.ylim(lims)
_ = plt.plot(lims, lims)
这个代码片段会生成一个散点图,展示了真实值和预测值之间的关系。在图中,每一个点代表了一个汽车,x轴代表真实值,y轴代表预测值。
接下来,我们可以计算一些评价指标,例如均方误差、平均绝对误差等。可以使用以下代码来计算:
from sklearn.metrics import mean_absolute_error
test_predictions = dnn_model.predict(test_features).flatten()
mae = mean_absolute_error(test_labels, test_predictions)
print('Mean Absolute Error:', mae)
模型优化
通过考虑模型的复杂度、训练数据的规模和噪声特征,我们可以尝试优化模型以提高预测准确性。以下是一些可能的优化方案:
- 增加训练数据
- 对输入缩放
- 尝试其它优化器或调整学习率
- 使用其它特征
- 对网络结构进行更改,例如添加或删除中间层或者神经元
结论
在这篇文章中,我们介绍了如何使用TensorFlow中的DNN模型来预测Auto MPG数据集上的MPG值。我们首先获取了数据集,然后进行了数据的归一化处理,并构建了一个DNN模型。接着,我们使用训练集对模型进行了训练,并在测试集上进行了评估。最后,我们详细介绍了一些模型优化的方法。希望这篇文章能够帮助您更好地使用TensorFlow构建和训练深度模型。