類神經網路在多元分類問題上的實作

甘果-avatar-img
發佈於程式
更新於 發佈於 閱讀時間約 9 分鐘

除了二元分類問題以為,現實上其實還有相當多的多元分類的問題可以應用。在「scikit-learn」程式庫中也提供了一個相當著名的「鳶尾花分類問題」(Anderson's Iris data

set);它總共有 150 筆資訊,分別同時觀察花萼(sepal)和花瓣(petal)的長度

(length)和寬度(width)來進行加拿大加斯帕半島上的三種不同的鳶尾花的分類,分別是山鳶尾(setosa)、變色鳶尾(verscicolor)和維吉尼亞鳶尾(virginica)。

  • 資料整理

從「scikit-learn」程式集的「datasets」子程式庫,可以使用「load_iris()」函數取得鳶尾花的資料,然後簡單整理成「pandas.DataFrame」的格式如下。

raw-image
from sklearn import datasets
iris=datasets.load_iris()
print(iris['DESCR'])
#———————————————-
import pandas as pd
from sklearn.model_selection import train_test_split

iris_x=pd.DataFrame(iris['data'])
iris_x.columns=iris['feature_names']
# print(iris_x.to_string(index=False))
iris_y=pd.DataFrame(iris['target'])
iris_y.columns=['target names']
# print(iris_y.to_string(index=False))
data=pd.concat([iris_x,iris_y],axis=1)
print(data.to_string(index=False))
  • 建立類神經網路

從整理好的資料來看,可以使用一個 4 個輸入 1 個輸出的類神經網路來建立模型;這個模型的輸出值,應該是「0」「1」「2」三個整數中的其中一個,這個輸出有三種分類結果,分別代表「山鳶尾」、「變色鳶尾」以及「virginica」;這種將分類輸出數值化的方法,是多元分類上常用的一種方式。

因此我們所創建的「類神經網路」類型也就跟之前的二元分類所使用的一致。

import torch
from torch import nn

#------------
class classNeural(nn.Module):
def __init__(self,n_input,n_hidden,n_output):
super().__init__()
self.n_input=n_input
self.n_hidden=n_hidden
self.n_output=n_output
#--------
self.layer1=nn.Linear(n_input,n_hidden)
self.layer2=nn.Linear(n_hidden,n_hidden)
self.layer3=nn.Linear(n_hidden,n_output)

self.active=nn.Sigmoid()
#--------
def forward(self,x):
x=self.active(self.layer1(x))
x=self.active(self.layer2(x))

return self.layer3(x)
#-------------
device=torch.device('cpu')
if(torch.cuda.is_available()):
device=torch.device('cuda')
torch.manual_seed(13)
irisNeural=classNeural(4,8,1).to(device)
loss_fn=nn.MSELoss() # MSE
optimizer=torch.optim.AdamW(irisNeural.parameters(),lr=0.01)
  • 轉換訓練及測試資料

我們將全部的資料分為 80% 的訓練資料以及 20% 的測試資料,並且進行正規化;同時,為了在 PyTorch/CUDA 使用 GPU 來訓練類神經網路,我們將訓練資料及接下來要使用的測試資料,轉換成 GPU 上使用的 tensor 型態。

import numpy as np
x=data.iloc[:,0:4].values
label=data.iloc[:,4].values

x_train, x_test, y_train, y_test = train_test_split(x,label,test_size=0.2,random_state=13)
data_train=(x_train-np.mean(x))/(np.max(x)-np.min(x))
label_train=(y_train-np.mean(label))/(np.max(label)-np.min(label))
data_test=(x_test-np.mean(x))/(np.max(x)-np.min(x))
label_test=(y_test-np.mean(label))/(np.max(label)-np.min(label))

X_train=torch.tensor(data_train.astype('float32')).to(device)
Y_train=torch.tensor(label_train.astype('float32')).unsqueeze(dim=1).to(device)
X_test=torch.tensor(data_test.astype('float32')).to(device)
  • 類神經網路訓練及預測結果

訓練的過程可以看到平均絕對誤差值會逐步收歛,之後就不再變化。分類模型訓練的結果,圓形表示訓練或測試的資料,而「X」形表示預測的結果。就四項特徵輸入預測的結果,120 筆訓練資料有 118 筆預測正確,正確率有 98%;30 筆測試資料有 28 筆預測正確,正確率有 93%。

raw-image
raw-image
raw-image
# 訓練
irisNeural.train()
for epoche in range(1500):
Y_pred=irisNeural(X_train)
loss=loss_fn(Y_pred,Y_train)
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 預測
irisNeural.eval()
with torch.inference_mode():
Y_pred=irisNeural(X_train)
y_pred=Y_pred.squeeze(dim=1).to('cpu').numpy()
label_predTrain=np.round(y_pred*(np.max(label)-np.min(label))+np.mean(label)).astype('int')
# 測試
with torch.inference_mode():
Y_pred=irisNeural(X_test)
y_pred=Y_pred.squeeze(dim=1).to('cpu').numpy()
label_predTest=np.round(y_pred*(np.max(label)-np.min(label))+np.mean(label)).astype('int')
留言
avatar-img
留言分享你的想法!
avatar-img
甘果的沙龍
4會員
25內容數
作者從國內主要的半導體公司退休,重回校園唸書;開始第三人生。分享退休投資規劃、科技產業經驗以及校園學習點滴。
甘果的沙龍的其他內容
2025/04/26
本文章說明如何在已安裝 Python 3.9 的 iMac mini 上設定 Python 虛擬環境,以及如何使用 venv 工具、安裝常用函式庫(如 numpy、pyTorch 等),並設定 Jupyter 連動不同 Python 虛擬環境。
Thumbnail
2025/04/26
本文章說明如何在已安裝 Python 3.9 的 iMac mini 上設定 Python 虛擬環境,以及如何使用 venv 工具、安裝常用函式庫(如 numpy、pyTorch 等),並設定 Jupyter 連動不同 Python 虛擬環境。
Thumbnail
2025/04/19
這篇文章說明如何在iMac mini M4上設定Jupyter Notebook作為遠端程式設計伺服器,方便使用iPad進行程式開發。文章涵蓋Jupyter Notebook的安裝、設定遠端連線以及建立可執行的shell script,讓伺服器能持續運作。
Thumbnail
2025/04/19
這篇文章說明如何在iMac mini M4上設定Jupyter Notebook作為遠端程式設計伺服器,方便使用iPad進行程式開發。文章涵蓋Jupyter Notebook的安裝、設定遠端連線以及建立可執行的shell script,讓伺服器能持續運作。
Thumbnail
2025/04/10
本文介紹如何將蘋果iMac mini作為CP值最高的人工智慧程式設計伺服器,搭配 iPad 進行遠端程式設計工作。文章說明瞭啟動遠端服務、連接SSH伺服器、使用外接硬碟及連接FTP伺服器等步驟,並推薦了相關應用 app。
Thumbnail
2025/04/10
本文介紹如何將蘋果iMac mini作為CP值最高的人工智慧程式設計伺服器,搭配 iPad 進行遠端程式設計工作。文章說明瞭啟動遠端服務、連接SSH伺服器、使用外接硬碟及連接FTP伺服器等步驟,並推薦了相關應用 app。
Thumbnail
看更多
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
本文章提供深度學習(Deep Learning)、深度神經網絡(DNN)、卷積神經網絡(CNN)和遞歸神經網絡(RNN)的簡介,並包含它們的定義、應用場景、基本結構、工作原理、優缺點和Python範例。
Thumbnail
本文章提供深度學習(Deep Learning)、深度神經網絡(DNN)、卷積神經網絡(CNN)和遞歸神經網絡(RNN)的簡介,並包含它們的定義、應用場景、基本結構、工作原理、優缺點和Python範例。
Thumbnail
類神經網路在圖形辨識應用中需要大量資料進行訓練,並常透過分批訓練來優化模型。本文介紹如何使用「MNIST」資料庫進行手寫數字辨識,並透過「資料分批」來有效處理訓練資料。最終,分批訓練的手法能夠提升模型的辨識能力,實現持續學習。
Thumbnail
類神經網路在圖形辨識應用中需要大量資料進行訓練,並常透過分批訓練來優化模型。本文介紹如何使用「MNIST」資料庫進行手寫數字辨識,並透過「資料分批」來有效處理訓練資料。最終,分批訓練的手法能夠提升模型的辨識能力,實現持續學習。
Thumbnail
本篇文章探討瞭如何透過叢集類神經網路對圖形資料進行分類。叢集類神經網路針對多個相互獨立的分類目標,提升訓練收斂速度。文中說明介紹了叢集類神經網路的建立和訓練過程,最終達成準確的分類預測。透過這種方法,即使處理複雜的分類問題,也能保持較高的訓練效率和準確度。
Thumbnail
本篇文章探討瞭如何透過叢集類神經網路對圖形資料進行分類。叢集類神經網路針對多個相互獨立的分類目標,提升訓練收斂速度。文中說明介紹了叢集類神經網路的建立和訓練過程,最終達成準確的分類預測。透過這種方法,即使處理複雜的分類問題,也能保持較高的訓練效率和準確度。
Thumbnail
本文介紹使用 PyTorch 及類神經網路進行圖形資料集的分類。Fashion-MNIST 提供了機器學習研究上的著名範例;服飾的灰階圖像的分類。本文指導讀者從安裝 torchvision 到建立類神經網路,進行圖形分類的完整過程。也詳述了資料處理及訓練過程,幫助理解類神經網路在圖形分類上的應用。
Thumbnail
本文介紹使用 PyTorch 及類神經網路進行圖形資料集的分類。Fashion-MNIST 提供了機器學習研究上的著名範例;服飾的灰階圖像的分類。本文指導讀者從安裝 torchvision 到建立類神經網路,進行圖形分類的完整過程。也詳述了資料處理及訓練過程,幫助理解類神經網路在圖形分類上的應用。
Thumbnail
本文探討類神經網路在多元分類問題的應用,以scikit-learn 程式庫中的鳶尾花分類問題為例。該問題涉及三種不同的鳶尾花分類,並詳細說明瞭資料整理、類神經網路的建立及訓練過程,最終達到高準確率的預測結果。本文將幫助讀者理解如何應用類神經網路、PyTorch 及 CUDA 來進行高效的模型訓練。
Thumbnail
本文探討類神經網路在多元分類問題的應用,以scikit-learn 程式庫中的鳶尾花分類問題為例。該問題涉及三種不同的鳶尾花分類,並詳細說明瞭資料整理、類神經網路的建立及訓練過程,最終達到高準確率的預測結果。本文將幫助讀者理解如何應用類神經網路、PyTorch 及 CUDA 來進行高效的模型訓練。
Thumbnail
本文說明反饋類神經網路在機器學習中解決非線性分類問題的方法,並以「PyTorch/CUDA」作為實現工具。介紹如何使用「scikit-learn」生成二元分類問題的數據,將訓練資料轉換為PyTorch/CUDA可用的格式,並搭建類神經網路進行訓練與測試;可用於有效解決各項機器學習的分類問題。
Thumbnail
本文說明反饋類神經網路在機器學習中解決非線性分類問題的方法,並以「PyTorch/CUDA」作為實現工具。介紹如何使用「scikit-learn」生成二元分類問題的數據,將訓練資料轉換為PyTorch/CUDA可用的格式,並搭建類神經網路進行訓練與測試;可用於有效解決各項機器學習的分類問題。
Thumbnail
本文介紹如何利用 PyTorch 和 CUDA,建立多變數類神經網路模型。特別的,文章以「Himmelblau function」為例,探討資料正規化及訓練資料型態轉換的過程,並說明如何在 GPU 上訓練類神經網路。分析訓練誤差值及模型的收斂情況,希望幫助讀者深入理解多變數類神經網路的應用與挑戰。
Thumbnail
本文介紹如何利用 PyTorch 和 CUDA,建立多變數類神經網路模型。特別的,文章以「Himmelblau function」為例,探討資料正規化及訓練資料型態轉換的過程,並說明如何在 GPU 上訓練類神經網路。分析訓練誤差值及模型的收斂情況,希望幫助讀者深入理解多變數類神經網路的應用與挑戰。
Thumbnail
本文將介紹如何在NVIDIA Jetson 人工智慧平台上,利用PyTorch和CUDA實現反饋類神經網路的運算。探討如何將運算任務從 CPU 轉移到 GPU,包括數據搬移和網路訓練的步驟。內容涵蓋建立類神經網路、確認 CUDA裝置、有效地在GPU上進行訓練和運算,充分利用 GPU 的加速優勢。
Thumbnail
本文將介紹如何在NVIDIA Jetson 人工智慧平台上,利用PyTorch和CUDA實現反饋類神經網路的運算。探討如何將運算任務從 CPU 轉移到 GPU,包括數據搬移和網路訓練的步驟。內容涵蓋建立類神經網路、確認 CUDA裝置、有效地在GPU上進行訓練和運算,充分利用 GPU 的加速優勢。
Thumbnail
本篇文章介紹如何使用 PyTorch 這個強大的工具程式庫來建立一個反饋類神經網路。從單變數的「墨西哥帽」模型學習,到設定類神經網路的結構和訓練方法,資料轉換、類神經網路創建以及訓練過程的步驟。此外,也分析訓練過程中的誤差趨勢,幫助理解模型性能,適合希望快速掌握 PyTorch 的人工智慧開發者。
Thumbnail
本篇文章介紹如何使用 PyTorch 這個強大的工具程式庫來建立一個反饋類神經網路。從單變數的「墨西哥帽」模型學習,到設定類神經網路的結構和訓練方法,資料轉換、類神經網路創建以及訓練過程的步驟。此外,也分析訓練過程中的誤差趨勢,幫助理解模型性能,適合希望快速掌握 PyTorch 的人工智慧開發者。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News