iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
自我挑戰組

Autoencoder與GAN:生成與重建的完美結合系列 第 8

[DAY08]TensorFlow基礎-波士頓房價預測

  • 分享至 

  • xImage
  •  

前言

昨天分享了Tensorflow和Keras的小知識,今天將會繼續分享如何使用 TensorFlow 和 Keras 來執行波士頓房價預測的示例。希望這個示例能幫助各位更好地理解如何建立和訓練深度學習模型。

正文

波士頓房價預測是一個很經典的神經網路回歸問題(雖然我當初剛接觸時覺得有點難QQ),首先我們要先載入所需的套件

import matplotlib.pyplot as plt
import numpy as np
from tensorflow.keras.datasets import boston_housing
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Input

在這裡可以發現,keras裡面含有波士頓房價的數據集,所以不需要在網路下載。而matplotlib和numpy則是用來繪圖跟計算,等等處理數據集時就需要numpy。

接下來我們需要載入波士頓房價數據集

(train_x, train_y), (test_x, test_y) = boston_housing.load_data()

然後對數據進行標準化

mean = train_x.mean(axis=0)
train_x -= mean
std = train_x.std(axis=0)
train_x /= std

test_x -= mean
test_x /= std

我們先將訓練集的所有樣本值進行平均。接下來,對訓練集中的每個特徵,減去該特徵的均值。這麼做的目的是將每個特徵的均值移動到零,從而實現中心化。

第三行則是求出每個特徵的標準差,然後再將訓練集去除以標準差,即可將數據縮放到一個標準範圍

最後也對測試集做一樣的動作。

接下來就來建立基本的神經網路吧

model = Sequential()
model.add(Input(shape=(train_x.shape[1],)))
model.add(Dense(64, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(1))
model.summary()
model.compile(optimizer='adam', loss='mse', metrics=['mae'])

https://ithelp.ithome.com.tw/upload/images/20230917/201619132FXCfZwQbg.png

在這裡我添加了四個全連結層,前三個使用 ReLU 激活函數,最後一個是線性層,並在輸入定義了特徵的形狀,該形狀為訓練數據集特徵的數量。最後在編譯模型時我使用了Adam作為優化器,損失函數為MSE,並以MAE作為評估指標

MAE(Mean Absolute Error)為絕對平均誤差。所有誤差求絕對值後,求其平均。是常見的回歸問題評估指標

最後就來訓練模型吧,我們需要使用model.fit來訓練模型

epochs = 500
history = model.fit(train_x, train_y,batch_size=16,epochs=epochs,validation_data=(test_x, test_y),shuffle=True)

這裡我們的訓練批次大小為16,訓練週期為500次,而shuffle則是將資料進行打亂

以下是執行過程

https://ithelp.ithome.com.tw/upload/images/20230917/201619138XxI3dLiKu.png

接下來我們該怎麼了解預測結果和訓練成效呢?這時候就需要用到matplotlib了!他可以將我們要的結果畫成一張圖讓我們了解訓練成效

我們先畫出預測圖

predictions = model.predict(test_x)
plt.figure(figsize=(10, 5))
plt.scatter(test_y, predictions)
plt.xlabel('real')
plt.ylabel('predict')
plt.title('real vs. predict')
plt.show()

首先我們先從predictions得到測試集的預測結果,然後使用plt.scatter將預測和實際價格畫成散點圖,就可以知道模型的預測是否與實際值一致了

https://ithelp.ithome.com.tw/upload/images/20230917/20161913sRw6euSRnv.png

由圖表可得知如果點點越分布在對角線,代表模型預測越準確

最後再畫出評估標準圖

plt.plot(np.arange(epochs), history.history['mae'], c='b', label='train_mae')
plt.plot(np.arange(epochs), history.history['val_mae'], c='y', label='val_mae')
plt.legend()
plt.xlabel('epochs')
plt.ylabel('mae')
plt.show()

https://ithelp.ithome.com.tw/upload/images/20230917/20161913nTKNpqbqna.png

評估標準為MAE越小模型效果就越好

這樣我們就完成第一個深度學習模型了!

總結

以上就是小弟我今天分享有關於深度學習模型的建立與訓練,明天將會使用另一種常見的鳶尾花分類來熟悉深度學習模型,那我們明天見!


上一篇
[DAY07]TensorFlow&keras介紹
下一篇
[DAY09] TensorFlow基礎2-鳶尾花分類
系列文
Autoencoder與GAN:生成與重建的完美結合30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言