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

甘果-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會員
26內容數
作者從國內主要的半導體公司退休,重回校園唸書;開始第三人生。分享退休投資規劃、科技產業經驗以及校園學習點滴。
甘果的沙龍的其他內容
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
本文章提供深度學習(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 的加速優勢。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News