使用叢集類神經網路進行圖形影像分類

更新於 2024/12/13閱讀時間約 14 分鐘

透過「數值化分類目標」的方法可以用來將影像分類,不過如果分類目標較多而且彼此之間並沒有相互關聯性,那麼這樣的方法有可能在訓練的時候遇到無法收歛的瓶頸。因此,有時候也可以利用多個類神網路建立叢集,來進行影像分類;透過單一化訓練目標來加速訓練收歛。

使用叢集類神經網路來進行分類

使用叢集類神經網路來進行分類

  • 下載分類問題資料

在這裏我們使用「Fashion-MNIST」作為分類問題的例子;所以還是先透過「torchvision」下載所需要的資料。

#-----------
import torchvision
from torchvision import datasets
from torchvision.transforms import ToTensor
import numpy as np

train_data=datasets.FashionMNIST(root="data",
train=True,
download=True,
transform=ToTensor(),
target_transform=None)
test_data=datasets.FashionMNIST(root="data",
train=False,
download=True,
transform=ToTensor())
  • 建立類神經網路類別

同樣地還是使用反饋類神經網路來進行分類,首先建立類神經網路的類別。

import torch 
from torch import nn
#-----------------------
# creat neural network class
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_output)
self.active=nn.Sigmoid()
#--------
def forward(self,x):
x=self.active(self.layer1(x))
return self.layer2(x)
  • 建立分類問題資料

我們使用「Fashion-MNIST」的前16筆圖形資料來建立叢集類神經網路模型。在輸入圖形資料的處理上並沒有改變,還是原來的 16 組 28*28 畫素的圖形資料。

#-------------    
device=torch.device('cpu')
if(torch.cuda.is_available()):
device=torch.device('cuda')
#------------
Images=train_data.data[0:16]
Labels=train_data.targets[0:16]
nType=len(train_data.classes)
#------------
Pixels=Images.flatten(start_dim=1,end_dim=2)
nData,nPixel=Pixels.shape
X_train=((Pixels-255/2.0)/(255)).to(device)
  • 叢集資料及類神經網路建立

在目標資料變數「cluster_y_train」上,必須要對映到分類目標;因為「Fashion-MNIST」總共有10的分類目標,所以要創建 10 組目標值,而且在依照分類目標的順序,將目標值設為 1,其他則為 0。

另外,利用 python 的物件序列方式,建立 10 個類神經網路「classNeural ()」所組成的叢集物件「cluster_neurals」;要特別注意的是,因為叢集物件是物件序列的形態,所以它的運算只能在「cpu」上進行;但是序列內的類神經網路物件,是由「PyTorch」所建立,因此它可以放在「gpu」來運算。

#------------
# set clustering targets
cluster_y_train=np.zeros((nType,nData,1))
for i in range(nData):
ix=Labels[i]
cluster_y_train[ix,i,0]=1.0
cluster_Y_train=torch.tensor(cluster_y_train.astype('float32')).to(device)
#------------
# set clustering neural networks
cluster_neurals=[]
for i in range(nType):
torch.manual_seed(13)
cluster_neurals.append(classNeural(28*28,10,1))
  • 安裝程式進度工具

因此叢集類神經網路的訓練包含多個類神經網路的運算,訓練過程當中沒有輸出畫面,可能造成一些錯誤判斷;因此訓練迴圈過程中,可以先安裝一個簡單好用的「tqdm」程式庫來即時回映訓練進度。

pip install tqdm 
  • 叢集類神經網路訓練

因為總共有 10 組分類目標以及 10 個類神經網路;因此,依序每個類神網路放入「gpu」進行訓練迴圈執行;各別類神類網路訓練完之後,透過「load_state_dict()」函數將訓練好的類神經網路的權重,在「cpu」上存回叢集類神經網路物件序列「cluster_neurals」。

from tqdm import tqdm
#-------------
# training neural network
for ptType in tqdm(range(nType)):
Y_train=cluster_Y_train[ptType]
imgNeural=cluster_neurals[ptType]
imgNeural.to(device)
optimizer=torch.optim.AdamW(imgNeural.parameters(),lr=0.01)
loss_fn=nn.MSELoss() # MSE

for epoche in range(100):
imgNeural.train()
Y_pred=imgNeural(X_train)
loss=loss_fn(Y_pred,Y_train)
optimizer.zero_grad()
loss.backward()
optimizer.step()

imgNeural.to('cpu')
cluster_neurals[ptType].load_state_dict(imgNeural.state_dict())
  • 叢集類神經網路預測

業集類神經網路訓練之後的結果,可以想成是各個分類的機率;因此可以透過「round()」函數來轉換成整數;列出來之後可以看到在 16 筆圖形資料,各個被分類到的目標類別的「布林值」;再利用「where()」函數找到目標位置,整合成預測結果;最後可以看到,預測的分類結果跟目標分類項目值完全一致。

raw-image
import numpy as np
#------------
# predition
y_pred=np.zeros(nData).astype('int')
for ptType in range(nType):
imgNeural=cluster_neurals[ptType]
imgNeural.to(device).eval()
with torch.inference_mode():
Y_output=imgNeural(X_train)
y_output=np.round(Y_output.squeeze(dim=1).to('cpu').numpy()).astype('int')
print('cluster #',(ptType+1),':',y_output)
ix=np.where(y_output==1)
y_pred[ix]=ptType

同樣地隨機選擇影像來進行測試,也可以得到一樣的結果。

raw-image
def clusterPrediction(cluster_neurals,PixelInput,device):
nData,nPixel=PixelInput.shape
y_pred=np.zeros(nData).astype('int')
for ptType in range(nType):
imgNeural=cluster_neurals[ptType]
imgNeural.to(device).eval()
with torch.inference_mode():
Y_output=imgNeural(PixelInput)
y_output=np.round(Y_output.squeeze(dim=1).to('cpu').numpy()).astype('int')
ix=np.where(y_output==1)
y_pred[ix]=ptType
return y_pred
#-------------
import random

random.seed(13)
fig=plt.figure(figsize=(9,9))
rows,cols=4,4
for i in range(rows*cols):
ix=random.randint(0,15)
#---------- handle input tensor
ImgInput=(train_data.data[ix]-255/2.0)/255
PixelInput=ImgInput.flatten().unsqueeze(dim=0).to(device)
#---------- neural network prediction
labelPred=clusterPrediction(cluster_neurals,PixelInput,device)
#---------- transfer output into label text
titlePred=train_data.classes[int(labelPred)]
titleTarget=train_data.classes[train_data.targets[ix]]
#---------- plot
fig.add_subplot(rows,cols,i+1)
plt.imshow(ImgInput.to('cpu'),cmap='gray')
strTitle=titleTarget+'->'+titlePred
plt.title(strTitle)
plt.axis(False)
plt.show()
avatar-img
4會員
17內容數
作者從國內主要的半導體公司退休,重回校園唸書;開始第三人生。分享退休投資規劃、科技產業經驗以及校園學習點滴。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
甘果的沙龍 的其他內容
本文介紹使用 PyTorch 及類神經網路進行圖形資料集的分類。Fashion-MNIST 提供了機器學習研究上的著名範例;服飾的灰階圖像的分類。本文指導讀者從安裝 torchvision 到建立類神經網路,進行圖形分類的完整過程。也詳述了資料處理及訓練過程,幫助理解類神經網路在圖形分類上的應用。
本文探討類神經網路在多元分類問題的應用,以scikit-learn 程式庫中的鳶尾花分類問題為例。該問題涉及三種不同的鳶尾花分類,並詳細說明瞭資料整理、類神經網路的建立及訓練過程,最終達到高準確率的預測結果。本文將幫助讀者理解如何應用類神經網路、PyTorch 及 CUDA 來進行高效的模型訓練。
本文說明反饋類神經網路在機器學習中解決非線性分類問題的方法,並以「PyTorch/CUDA」作為實現工具。介紹如何使用「scikit-learn」生成二元分類問題的數據,將訓練資料轉換為PyTorch/CUDA可用的格式,並搭建類神經網路進行訓練與測試;可用於有效解決各項機器學習的分類問題。
本文介紹如何利用 PyTorch 和 CUDA,建立多變數類神經網路模型。特別的,文章以「Himmelblau function」為例,探討資料正規化及訓練資料型態轉換的過程,並說明如何在 GPU 上訓練類神經網路。分析訓練誤差值及模型的收斂情況,希望幫助讀者深入理解多變數類神經網路的應用與挑戰。
本文將介紹如何在NVIDIA Jetson 人工智慧平台上,利用PyTorch和CUDA實現反饋類神經網路的運算。探討如何將運算任務從 CPU 轉移到 GPU,包括數據搬移和網路訓練的步驟。內容涵蓋建立類神經網路、確認 CUDA裝置、有效地在GPU上進行訓練和運算,充分利用 GPU 的加速優勢。
本篇文章介紹如何使用 PyTorch 這個強大的工具程式庫來建立一個反饋類神經網路。從單變數的「墨西哥帽」模型學習,到設定類神經網路的結構和訓練方法,資料轉換、類神經網路創建以及訓練過程的步驟。此外,也分析訓練過程中的誤差趨勢,幫助理解模型性能,適合希望快速掌握 PyTorch 的人工智慧開發者。
本文介紹使用 PyTorch 及類神經網路進行圖形資料集的分類。Fashion-MNIST 提供了機器學習研究上的著名範例;服飾的灰階圖像的分類。本文指導讀者從安裝 torchvision 到建立類神經網路,進行圖形分類的完整過程。也詳述了資料處理及訓練過程,幫助理解類神經網路在圖形分類上的應用。
本文探討類神經網路在多元分類問題的應用,以scikit-learn 程式庫中的鳶尾花分類問題為例。該問題涉及三種不同的鳶尾花分類,並詳細說明瞭資料整理、類神經網路的建立及訓練過程,最終達到高準確率的預測結果。本文將幫助讀者理解如何應用類神經網路、PyTorch 及 CUDA 來進行高效的模型訓練。
本文說明反饋類神經網路在機器學習中解決非線性分類問題的方法,並以「PyTorch/CUDA」作為實現工具。介紹如何使用「scikit-learn」生成二元分類問題的數據,將訓練資料轉換為PyTorch/CUDA可用的格式,並搭建類神經網路進行訓練與測試;可用於有效解決各項機器學習的分類問題。
本文介紹如何利用 PyTorch 和 CUDA,建立多變數類神經網路模型。特別的,文章以「Himmelblau function」為例,探討資料正規化及訓練資料型態轉換的過程,並說明如何在 GPU 上訓練類神經網路。分析訓練誤差值及模型的收斂情況,希望幫助讀者深入理解多變數類神經網路的應用與挑戰。
本文將介紹如何在NVIDIA Jetson 人工智慧平台上,利用PyTorch和CUDA實現反饋類神經網路的運算。探討如何將運算任務從 CPU 轉移到 GPU,包括數據搬移和網路訓練的步驟。內容涵蓋建立類神經網路、確認 CUDA裝置、有效地在GPU上進行訓練和運算,充分利用 GPU 的加速優勢。
本篇文章介紹如何使用 PyTorch 這個強大的工具程式庫來建立一個反饋類神經網路。從單變數的「墨西哥帽」模型學習,到設定類神經網路的結構和訓練方法,資料轉換、類神經網路創建以及訓練過程的步驟。此外,也分析訓練過程中的誤差趨勢,幫助理解模型性能,適合希望快速掌握 PyTorch 的人工智慧開發者。
你可能也想看
Google News 追蹤
Thumbnail
投資新手大多從身邊市場開始著手,選擇台股市場入門,單筆投資或台股定期定額投資,隨著經驗累積,進入美股市場也是好選擇,這篇文章帶你前進美股投資,證券開戶選擇國內券商複委託,使用美股定期定額投資,並以國泰 CUBE App為例說明。 內容目錄: 1.一站式開戶:以國泰世華 CUBE App 為例
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
希望透過條列和簡介,可以更方便讀者選讀自己偏好的主題。
Thumbnail
這篇整理了我這個月讀到一些不在我分類中但很不錯內容,我也都有附上來源,如果你想了解我這個月發現了什麼不錯的內容都可以在這裡找到,而且我還會加上我的一點個人回饋 另外每月資訊量不同,造成每一類的內容不一,有的內容會比較多,如果你只想看精選,我會在每一類中都挑出 3 篇我最推的,前面會有星號
在現代學術研究中,閱讀大量文獻是一個必要且繁重的任務。然而,通過將學術閱讀流程標準化,能顯著提升效率,使閱讀變得更加有條理。最近,我實踐了兩個已經標準化的動作,每個動作都進行了50次以上的測試,效果顯著。 ▋動作一:將文獻內容轉為資訊塊 這個動作的目的是將閱讀材料中的重要內容轉換為小而具
Thumbnail
其實除了研究所需,觀察也是靈感的來源、也可以是日常生活的樂趣。
Thumbnail
本篇文章介紹如何使用心智圖和主動回憶的方式來提高讀書效率,包括製作心智圖、使用主動回憶背誦心智圖和進行間隔重複的讀書方法。這些方法可以幫助讀者更有效地學習,並且根據個人的學習節奏進行調整。
Thumbnail
本文介紹如何結合使用 Readwise 和 Readwise Reader 進行高效的碎片化閱讀與筆記管理。透過 Readwise Reader 閱讀多平台內容並進行高亮和筆記,利用 Readwise 整理和回顧劃線,並匯出至 Heptabase 和 Obsidian,提升學習效率,避免碎片化思考。
Thumbnail
在傳統的筆記方法中存在著分類僵化和過度依賴關鍵字的問題。卡片筆記以一張卡片一個知識,確保知識的獨立性,並且建立知識間的多重連接,形成網狀結構。 這本書介紹了用卡片筆記做知識管理的技巧,幫助大家將零散的知識系統化,從而在需要時能夠迅速提取並應用。
Thumbnail
承繼上一篇我所提到的劇本,我今天意識到「標籤」,其實就是一個簡化版、濃縮版的劇本 什麼是標籤? 像 MBTI、XX症、XX學校畢業的,都是一個標籤 他的詞彙很短,但背後蘊含了大量的價值觀 (應該說,蘊含了大量言談者所「認為」的價值觀)
Thumbnail
以前考試最愛買參考書,參考書的編排通常是重點精華+題目+詳解。 不愛讀課本,只看重點精華就去做題目,以為這樣可以節省時間,做題目的時候模模糊糊,A好像也對,C看起來也很像...,根本沒搞清楚基本原理,又要重頭念一次。 才發現重點要自己整理,整理的過程是釐清內容和鞏固記憶最重要的環節。 整理是一
Thumbnail
類比思維是一個強大的學習工具,你可以通過它來連結兩個完全不同的主題,加深對學習內容的理解。這篇文章將介紹類比思維的重要性和如何應用。同時還提到了知名精靈巧思,他利用類比思維來讓學生更深入地理解知識和記憶知識,文章還提供了AI探索類比應用的方法,讓讀者可以更好地理解和應用類比思維。
Thumbnail
投資新手大多從身邊市場開始著手,選擇台股市場入門,單筆投資或台股定期定額投資,隨著經驗累積,進入美股市場也是好選擇,這篇文章帶你前進美股投資,證券開戶選擇國內券商複委託,使用美股定期定額投資,並以國泰 CUBE App為例說明。 內容目錄: 1.一站式開戶:以國泰世華 CUBE App 為例
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
希望透過條列和簡介,可以更方便讀者選讀自己偏好的主題。
Thumbnail
這篇整理了我這個月讀到一些不在我分類中但很不錯內容,我也都有附上來源,如果你想了解我這個月發現了什麼不錯的內容都可以在這裡找到,而且我還會加上我的一點個人回饋 另外每月資訊量不同,造成每一類的內容不一,有的內容會比較多,如果你只想看精選,我會在每一類中都挑出 3 篇我最推的,前面會有星號
在現代學術研究中,閱讀大量文獻是一個必要且繁重的任務。然而,通過將學術閱讀流程標準化,能顯著提升效率,使閱讀變得更加有條理。最近,我實踐了兩個已經標準化的動作,每個動作都進行了50次以上的測試,效果顯著。 ▋動作一:將文獻內容轉為資訊塊 這個動作的目的是將閱讀材料中的重要內容轉換為小而具
Thumbnail
其實除了研究所需,觀察也是靈感的來源、也可以是日常生活的樂趣。
Thumbnail
本篇文章介紹如何使用心智圖和主動回憶的方式來提高讀書效率,包括製作心智圖、使用主動回憶背誦心智圖和進行間隔重複的讀書方法。這些方法可以幫助讀者更有效地學習,並且根據個人的學習節奏進行調整。
Thumbnail
本文介紹如何結合使用 Readwise 和 Readwise Reader 進行高效的碎片化閱讀與筆記管理。透過 Readwise Reader 閱讀多平台內容並進行高亮和筆記,利用 Readwise 整理和回顧劃線,並匯出至 Heptabase 和 Obsidian,提升學習效率,避免碎片化思考。
Thumbnail
在傳統的筆記方法中存在著分類僵化和過度依賴關鍵字的問題。卡片筆記以一張卡片一個知識,確保知識的獨立性,並且建立知識間的多重連接,形成網狀結構。 這本書介紹了用卡片筆記做知識管理的技巧,幫助大家將零散的知識系統化,從而在需要時能夠迅速提取並應用。
Thumbnail
承繼上一篇我所提到的劇本,我今天意識到「標籤」,其實就是一個簡化版、濃縮版的劇本 什麼是標籤? 像 MBTI、XX症、XX學校畢業的,都是一個標籤 他的詞彙很短,但背後蘊含了大量的價值觀 (應該說,蘊含了大量言談者所「認為」的價值觀)
Thumbnail
以前考試最愛買參考書,參考書的編排通常是重點精華+題目+詳解。 不愛讀課本,只看重點精華就去做題目,以為這樣可以節省時間,做題目的時候模模糊糊,A好像也對,C看起來也很像...,根本沒搞清楚基本原理,又要重頭念一次。 才發現重點要自己整理,整理的過程是釐清內容和鞏固記憶最重要的環節。 整理是一
Thumbnail
類比思維是一個強大的學習工具,你可以通過它來連結兩個完全不同的主題,加深對學習內容的理解。這篇文章將介紹類比思維的重要性和如何應用。同時還提到了知名精靈巧思,他利用類比思維來讓學生更深入地理解知識和記憶知識,文章還提供了AI探索類比應用的方法,讓讀者可以更好地理解和應用類比思維。