iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
自我挑戰組

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

[DAY09] TensorFlow基礎2-鳶尾花分類

  • 分享至 

  • xImage
  •  

前言

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

正文

與波士頓房價預測不同,鳶尾花是個常見的深度學習模型分類問題,首先我們要先載入所需的套件

from sklearn import datasets
from sklearn.model_selection import train_test_split
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Input
from tensorflow.keras.utils import to_categorical

基本上與波士頓房價相同,鳶尾花分類也可以直接從sklearn載入,比較特別是我們多載入了to_categorical,這是等等處理數據集時要用到的工具

接下來我們需要載入鳶尾花分類數據集

dataset = datasets.load_iris()

然後對數據進行處理

x = dataset.data
y = dataset.target
y = to_categorical(y)
tr_x, te_x, tr_y, te_y = train_test_split(x, y, train_size=0.8)

我們先從數據集中提取特徵數據給變數X,其中包和花瓣和花萼的長度和寬度,然後再提取標籤交給Y,其中包含鳶尾花數據集中的目標類別,表示每個樣本屬於哪一個鳶尾花的品種

而弟三行則是對Y進行one-hot編碼,one-hot編碼是將每個類別映射為一個向量,其中只有一個元素為 1(表示該樣本屬於該類別),其他元素都為 0。

最後使用train_test_split將數據集拆分為訓練集(80%)和測試集(20%)。

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

model = Sequential()
model.add(Input(shape=(4,)))
model.add(Dense(units=4, activation='relu', kernel_initializer='glorot_uniform'))
model.add(Dense(units=6, activation='relu', kernel_initializer='glorot_uniform'))
model.add(Dense(units=3, activation='softmax', kernel_initializer='glorot_uniform'))
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

https://ithelp.ithome.com.tw/upload/images/20230918/20161913S0P5dRRYPI.png

在這裡我添加了三個全連結層,前兩個使用 ReLU 激活函數,最後一使用softmax,並在輸入定義了特徵的形狀。最後在編譯模型時我使用了Adam作為優化器,損失函數為categorical_crossentropy(分類交叉熵),並以accuracy(準確率)作為評估指標

categorical_crossentropy為分類交叉熵,多用於分類問題。它用於衡量模型預測的類別概率分佈和實際類別的差異

最後使用model.fit來訓練模型

history = model.fit(tr_x, tr_y, batch_size=16, epochs=300)

這裡我們的訓練批次大小為16,訓練週期為300次

以下是執行過程

https://ithelp.ithome.com.tw/upload/images/20230918/20161913luQKS2xQdR.png

接下來我們需要評估模型在訓練集和測試集上的表現

train_loss, train_accuracy = model.evaluate(tr_x, tr_y)
print('Train Loss:', train_loss)
print('Train Accuracy:', train_accuracy)

test_loss, test_accuracy = model.evaluate(te_x, te_y)
print('Test Loss:', test_loss)
print('Test Accuracy:', test_accurac

https://ithelp.ithome.com.tw/upload/images/20230918/201619130BBoLinDfQ.png

這樣就會顯示訓練集和測試集的損失與準確率了!

最後預測測試集並列出預測結果

for i in range(len(predictions)):
    predicted_class = np.argmax(predictions[i])
    actual_class = np.argmax(te_y[i])
    print(f'Sample {i+1}: Predicted class = {predicted_class}, Actual class = {actual_class}')

https://ithelp.ithome.com.tw/upload/images/20230918/20161913G8UYe2t2rU.png

這樣就會列出模型預測的類別與實際的類別了!

總結

經過兩天的練習,其實無論是波士頓房價預測還是鳶尾花分類,其實都是一樣動作,唯一不同的是需要對其問題的方向修改損失與評估標準而已~以上就是小弟我今天分享有關於深度學習模型的建立與訓練,明天進入我們的第二階段,也就是Autoencoder,那我們明天見!


上一篇
[DAY08]TensorFlow基礎-波士頓房價預測
下一篇
[DAY10]Autoencoder簡介
系列文
Autoencoder與GAN:生成與重建的完美結合30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言