如何使用TensorFlow中的DNN模型预测Auto MPG数据集上的MPG值?

如何使用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构建和训练深度模型。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程