TensorFlow回归:建立了一个模型来预测汽车的燃油效率。.doc

上传人:白大夫 文档编号:3274079 上传时间:2019-08-07 格式:DOC 页数:6 大小:32KB
返回 下载 相关 举报
TensorFlow回归:建立了一个模型来预测汽车的燃油效率。.doc_第1页
第1页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《TensorFlow回归:建立了一个模型来预测汽车的燃油效率。.doc》由会员分享,可在线阅读,更多相关《TensorFlow回归:建立了一个模型来预测汽车的燃油效率。.doc(6页珍藏版)》请在三一文库上搜索。

1、TensorFlow回归:建立了一个模型来预测汽车的燃油效率。今天的内容介绍的是回归问题。在回归问题中,我们的目标是预测连续值的输出,如价格或概率。将此与分类问题进行对比,我们的目标是预测离散标签(例如,图片里有一个苹果或一个橙子)。本笔记采用了经典的 Auto MPG 数据集,并建立了一个模型来预测 20 世纪 70 年代末和 80 年代初汽车的燃油效率。为此,我们将为模型提供该时间段内许多模型的描述。此描述包括以下属性:气缸,排量,马力和重量。此示例使用 tf.keras API,有关详细信息,请参阅指南https:/tensorflow.google/guide/keras?hl=zh-

2、CN# Use seaborn for pairplot!pip install -q seabornfrom _future_ import absolute_import, division, print_functionimport pathlibimport pandas as pdimport seaborn as snsimport tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import layersprint(tf._version_)1.12.0Auto MPG 数据集该数据集可从UCI

3、Machine Learning Repository 获得(https:/archive.ics.uci.edu/)。 取得数据首先下载数据集dataset_path = keras.utils.get_file(auto-mpg.data, https:/archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data)dataset_pathDownloading data from https:/archive.ics.uci.edu/ml/machine-learning-databases/auto-m

4、pg/auto-mpg.data32768/30286 = - 0s 1us/step/root/.keras/datasets/auto-mpg.data使用 pandas 导入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)d

5、ataset = raw_dataset.copy()dataset.tail()清理数据数据集包含一些未知数值dataset.isna().sum()MPG 0Cylinders 0Displacement 0Horsepower 6Weight 0Acceleration 0Model Year 0Origin 0dtype: int64删除那些行来保持本初始教程简单明了dataset = dataset.dropna()上方表格中,“Origin” 列实际上是分类,而不是数字。所以把它转换为one-hot:origin = dataset.pop(Origin)datasetUSA =

6、(origin = 1)*1.0datasetEurope = (origin = 2)*1.0datasetJapan = (origin = 3)*1.0dataset.tail()将数据拆分成训练和测试现在将数据拆分成一个训练集和一个测试集。我们将在模型的最终评估中使用测试集。train_dataset = dataset.sample(frac=0.8,random_state=0)test_dataset = dataset.drop(train_dataset.index)检查数据快速浏览训练集中几个对列的联合分布sns.pairplot(train_datasetMPG, Cyl

7、inders, Displacement, Weight, diag_kind=kde)并查看这个整体统计数据:train_stats = train_dataset.describe()train_stats.pop(MPG)train_stats = train_stats.transpose()train_stats从标签中分割特征将目标值或 “标签” 与特征分开。此标签是您将要训练模型进行预测的数值。train_labels = train_dataset.pop(MPG)test_labels = test_dataset.pop(MPG)将数据规范化再次查看上面的train_sta

8、ts 块,并注意一下,每个特征的范围有多么的大相径庭。使用不同比例和范围进行特征规范化是一个不错的做法。尽管模型可能在没有特征归一化的情况下收敛,但它会使训练更加困难,并且它使得结果模型依赖于输入中使用的单位的选择。注意:我们故意只使用来自训练集的统计数据,这些统计数据也将被用于评估。这样模型就没有关于测试集的任何信息。defnorm(x): return(x - train_statsmean) / train_statsstdnormed_train_data = norm(train_dataset)normed_test_data = norm(test_dataset)这个规范化的数

9、据是我们用来训练模型的数据。注意:此处用于规范化输入的统计信息与模型权重同样重要。模型建模让我们建立我们的模型。在这里,我们将使用具有两个密集连接的隐藏层的 Sequential 模型,以及返回单个连续值的输出层。模型构建步骤包含在一个函数 build_model 中,因为我们稍后将创建第二个模型。def build_model(): model = keras.Sequential( layers.Dense(64, activation=tf.nn.relu, input_shape=len(train_dataset.keys(), layers.Dense(64, activation

10、=tf.nn.relu), layers.Dense(1) ) optimizer = tf.train.RMSPropOptimizer(0.001) modelpile(loss=mse, optimizer=optimizer, metrics=mae, mse) return modelmodel = build_model()检查模型使用 .summary 方法打印模型的简单描述 model.summary()_Layer (type) Output Shape Param # =dense (Dense) (None, 64) 640 _dense_1 (Dense) (None,

11、 64) 4160 _dense_2 (Dense) (None, 1) 65 =Total params: 4,865Trainable params: 4,865Non-trainable params: 0_现在来试一试这个模型。从训练数据中取出一批 10 个示例并调用 model.predict。example_batch = normed_train_data:10example_result = model.predict(example_batch)example_resultarray( 0.08682194, 0.0385334 , 0.11662665, -0.223705

12、92, 0.12390759, 0.1889237 , 0.1349103 , 0.41427213, 0.19710071, 0.01540279, dtype=float32)它看上去起效了,产生预期的形状和类型的结果。训练模型该模型经过 1000 个 epoch 的训练,并在历史对象中记录训练和验证的准确性。# Display training progress by printing a single dot for each completed epochclass PrintDot(keras.callbacks.Callback): def on_epoch_end(self,

13、epoch, logs): if epoch % 100 = 0: print() print(., end=)EPOCHS = 1000history = model.fit( normed_train_data, train_labels, epochs=EPOCHS, validation_split = 0.2, verbose=0, callbacks=PrintDot().使用存储在历史对象中的统计数据将模型的训练进度可视化。hist = pd.DataFrame(history.history)histepoch = history.epochhist.tail()import

14、matplotlib.pyplot as pltdef plot_history(history): plt.figure() plt.xlabel(Epoch) plt.ylabel(Mean Abs Error MPG) plt.plot(histepoch, histmean_absolute_error, label=Train Error) plt.plot(histepoch, histval_mean_absolute_error, label = Val Error) plt.legend() plt.ylim(0,5) plt.figure() plt.xlabel(Epoc

15、h) plt.ylabel(Mean Square Error $MPG$) plt.plot(histepoch, histmean_squared_error, label=Train Error) plt.plot(histepoch, histval_mean_squared_error, label = Val Error) plt.legend() plt.ylim(0,20)plot_history(history)该图显示数百个 epoch 后的验证错误几乎没有改善,甚至降低了。让我们更新 model.fit 方法,以便在验证分数没有提高时自动停止训练。我们将使用一个回调测试每

16、个 epoch 的训练条件。如果经过一定数量的时期而没有显示出改进,则自动停止训练。您可以在https:/tensorflow.google/api_docs/python/tf/keras/callbacks/EarlyStopping?hl=zh-CN了解有关此回调的更多信息。model = build_model()# The patience parameter is the amount of epochs to check for improvementearly_stop = keras.callbacks.EarlyStopping(monitor=val_loss, pati

17、ence=50)history = model.fit(normed_train_data, train_labels, epochs=EPOCHS, validation_split = 0.2, verbose=0, callbacks=early_stop, PrintDot()plot_history(history)该图表显示在验证集上,平均误差通常在 +/- 2 MPG 左右。这个结果好吗? 我们将决定权留给你。让我们看看模型在测试集上是如何执行的,在训练模型时我们并没有使用它:loss, mae, mse = model.evaluate(normed_test_data, te

18、st_labels, verbose=0)print(Testing set Mean Abs Error: :5.2f MPG.format(mae)Testing set Mean Abs Error: 1.88 MPG作出预测最后,使用测试集中的数据预测 MPG 值:test_predictions = model.predict(normed_test_data).flatten()plt.scatter(test_labels, test_predictions)plt.xlabel(True Values MPG)plt.ylabel(Predictions MPG)plt.axi

19、s(equal)plt.axis(square)plt.xlim(0,plt.xlim()1)plt.ylim(0,plt.ylim()1)_ = plt.plot(-100, 100, -100, 100)error = test_predictions - test_labelsplt.hist(error, bins = 25)plt.xlabel(Prediction Error MPG)_ = plt.ylabel(Count)结论本笔记介绍了一些处理回归问题的技巧:均方误差(MSE)是用于回归问题的常见损失函数(与分类问题不同)同样,用于回归的评估指标与分类不同。常见的回归指标是平均绝对误差(MAE)当输入数据要素具有不同范围的值时,应单独缩放每个要素如果训练数据不多,则选择隐藏层较少的小型网络,以避免过度拟合防止过度装配的一个有用的技术是尽早停止

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1