如何使用TensorFlow在Auto MPG数据集上构建DNN(深度神经网络)模型?

如何使用TensorFlow在Auto MPG数据集上构建DNN(深度神经网络)模型?

TensorFlow是目前最流行的深度学习框架之一,它提供了丰富的工具和API,可以方便地构建和训练各种深度模型。在这篇文章中,我们将探讨如何使用TensorFlow构建一个多层神经网络模型,对汽车MPG数据集进行回归预测。

更多Python教程,请阅读:Python 教程

数据预处理

在开始构建模型之前,我们需要对数据进行预处理。这里我们将使用Auto MPG数据集来进行训练和测试。数据集包含了398个样本,每个样本包含了8个特征。我们需要将这些特征归一化处理,将其转换成标准正态分布。

下面是对数据集进行预处理的代码,其中使用了Pandas和NumPy库来对数据进行处理。

import pandas as pd
import numpy as np

# 加载数据集
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data"
data = pd.read_csv(url, header=None, sep='\s+', names=["MPG", "Cylinders", "Displacement", "Horsepower", "Weight",
                                                       "Acceleration", "Model Year", "Origin"])

# 对数据进行预处理
data = data.replace('?', np.nan)
data = data.dropna()

# 将类别型特征转换成数值型特征
data["Origin"] = data["Origin"].map({1: "USA", 2: "Europe", 3: "Japan"})
data = pd.get_dummies(data, prefix="", prefix_sep="")

# 将数据集分成训练集和测试集
train_dataset = data.sample(frac=0.8, random_state=0)
test_dataset = data.drop(train_dataset.index)

# 对特征进行归一化处理
train_stats = train_dataset.describe()
train_stats.pop("MPG")
train_stats = train_stats.transpose()

def norm(x):
    return (x - train_stats['mean']) / train_stats['std']

train_labels = train_dataset.pop('MPG')
test_labels = test_dataset.pop('MPG')

normed_train_data = norm(train_dataset)
normed_test_data = norm(test_dataset)

构建模型

在预处理完数据后,我们可以开始构建模型了。在这里,我们将使用Keras API来搭建多层感知器(MLP)模型,它包含了一个输入层,两个隐藏层和一个输出层。接下来,我们将逐步介绍如何构建这个模型。

首先,我们需要导入TensorFlow和Keras库。

import tensorflow as tf
from tensorflow import keras

然后,我们可以定义一个函数build_model来构建模型。这个函数将返回一个Keras模型实例,它由一个输入层、两个隐藏层和一个输出层组成。我们可以通过调整隐藏层的神经元数、激活函数和正则化参数等来改进模型性能。

def build_model():
    model = keras.Sequential([
        keras.layers.Dense(64, activation=tf.nn.relu, input_shape=[len(train_dataset.keys())]),
        keras.layers.Dense(64, activation=tf.nn.relu),
        keras.layers.Dense(1)
    ])

    optimizer = tf.keras.optimizers.RMSprop(0.001)

    model.compile(loss='mse',
                  optimizer=optimizer,
                  metrics=['mae', 'mse'])
    return model

model = build_model()
model.summary()

输出模型的执行结果如下所示:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 64)                576       
_________________________________________________________________
dense_1 (Dense)              (None, 64)                4160      
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 65        
=================================================================
Total params: 4,801
Trainable params: 4,801
Non-trainable params: 0
_________________________________________________________________

训练模型完成了模型的搭建后,我们可以开始训练模型了。在这里,我们将使用已经预处理过的训练集数据,通过fit方法对模型进行训练。同时,我们还设置了一些回调函数来监控模型的性能,例如EarlyStopping和TensorBoard。

# 定义回调函数
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir='./logs')

# 训练模型
history = model.fit(normed_train_data, train_labels, epochs=1000,
                    validation_split=0.2, verbose=0, callbacks=[early_stop, tensorboard_callback])

# 输出训练结果
hist = pd.DataFrame(history.history)
hist['epoch'] = history.epoch
print(hist.tail())

在训练模型之后,我们可以通过plotting来可视化模型的性能表现。在这里,我们将使用Matplotlib库来绘制训练集和验证集的损失值和MAE值的变化曲线。

import matplotlib.pyplot as plt

def plot_history(history):
    hist = pd.DataFrame(history.history)
    hist['epoch'] = history.epoch

    plt.figure()
    plt.xlabel('Epoch')
    plt.ylabel('Mean Abs Error [MPG]')
    plt.plot(hist['epoch'], hist['mae'], label='Train Error')
    plt.plot(hist['epoch'], hist['val_mae'], label='Val Error')
    plt.ylim([0, 5])
    plt.legend()

    plt.figure()
    plt.xlabel('Epoch')
    plt.ylabel('Mean Square Error [MPG^2]')
    plt.plot(hist['epoch'], hist['mse'], label='Train Error')
    plt.plot(hist['epoch'], hist['val_mse'], label='Val Error')
    plt.ylim([0, 20])
    plt.legend()
    plt.show()

plot_history(history)

测试模型

最后,我们将测试集数据输入到训练好的模型中,通过evaluate方法计算模型的测试误差。同时,我们还可以使用predict方法来预测新的数据。在这里,我们将输出前10个样本的真实值和预测值。

# 测试模型
loss, mae, mse = model.evaluate(normed_test_data, test_labels, verbose=0)
print("Testing set Mean Abs Error: {:5.2f} MPG".format(mae))

# 预测新数据
test_predictions = model.predict(normed_test_data).flatten()

# 输出前10个样本的真实值和预测值
print(test_labels[:10])
print(test_predictions[:10])

结论

本文介绍了如何在TensorFlow中使用Keras API构建深度神经网络模型,并对Auto MPG数据集进行了回归预测。在模型训练过程中,我们采用了回调函数来监控模型的性能,通过可视化工具Matplotlib绘制了训练集和验证集的损失值和MAE值的变化曲线。最终,在测试集上对模型进行了测试,并输出了前10个样本的真实值和预测值。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程