使用反饋類神經網路進行圖形分類的基本作法

更新於 2024/12/07閱讀時間約 15 分鐘

多維度分類問題中,最重要的部份是一部份是透過類神經網路進行圖形的分類;PyTorch 也提供了圖形方面相當多的資源以及資料,其中包括著名的「Fashion-MNIST」問題的圖形資料。

  • Fashion-MNIST 資料集

「Fashion-MNIST」問題提供了7,0000 個服飾的灰階圖形資料,每個服飾圖形由「28*28」的像素所組成;其中60,000 為訓練資料而10,000組則為測試資料;所有的圖形共分成 9 組不同的服飾類別。

raw-image
  • 安裝 torchvision

在 PyTorch 中要使「Fashion-MNIST」資料以及相關的圖形處理工具,首先要先安裝「torchvision」程式庫。由於我們已經透過 nVidia 提供的 wheel 檔安裝過「PyTorch」了,所以只要裝原來的 wheel 檔複製到工作目錄,然後對照「 nVidia PyTorch 軟體工具安裝網頁」確認適當的版本,再下安裝指令就可以了。

raw-image

由於我們安裝的 PyTorch 版本是 2.0,所以安裝指令指定「torchvision==0.15」。

pip3 install ‘torchvision==0.15*.whl
  • 使用「Fashion-MNIST」資料

接下來可以寫程式來使用這組資料,分別將訓練資料及測試資料放在「train_data」及「test_data」這兩個變數;在第一次讀取資料的程式執行時,它會在本機端建立一個「data/FashionMNIST」的資料夾,將資料放在本機端;讀取的資料形態可以直接指定為「tensor」方便接下來類神經網路的訓練使用。

import torchvision
from torchvision import datasets
from torchvision.transforms import ToTensor

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())
print('train data count:',len(train_data))
print('test data count:',len(test_data))
  • 建立類神經網路類別並指定 CUDA/GPU

這一部份與之前的多維分類問題的類神經網路的作法是一樣的。

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_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)
#-----------------------
# assign CUDA device
device=torch.device('cpu')
if(torch.cuda.is_available()):
device=torch.device('cuda')
  • 資料初步分析

因為「Fashion-MINST」的圖形資料相對於之前的數值資料,資料量相對地比較大。每一個灰階圖形是由「28*28」的圖形點 (pixel) 所形成,每個圖形點的數值由 0 到 255 來形成;在初步的影像分類學習上,我們先使用最前面的 16 組圖形來作分類,如程式中的「Images」及「labels」變數。圖形的 pixel 資料可以使用「train_data.data」變數來取得;圖形的分類結果則以整數的方式,放在「train_data.targets」;分類的標註文字則放在「train_data.classes」文字陣列中。

raw-image
import torch
from torch import nn
import matplotlib.pyplot as plt
import numpy as np
#-----------
print(train_data.data[0].shape)
print('max:',np.max(train_data.data[0].numpy()))
print('min:',np.min(train_data.data[0].numpy()))
#-----------
Images=train_data.data[0:16]
labels=train_data.targets[0:16].numpy()
#-----------------------
fig=plt.figure(figsize=(9,9))
rows,cols=4,4
for i in range(rows*cols):
fig.add_subplot(rows,cols,i+1)
plt.imshow(Images[i],cmap='gray')
plt.title(train_data.classes[labels[i]])
plt.axis(False)
plt.show()
#-----------------
  • 準備訓練資料

由於圖形資料是一個二維的 pixel 所形成的矩陣,所以在進入類神經網路訓練之前,要將二維矩陣轉換成一維的資料。這時候我們可以使用「torchvision」提供的「flatten()」函數,將訓練資料由16個二維變數轉換成16個一維變數;同時將訓練資料成正規化。


raw-image
import torch
from torch import nn
import numpy as np
# setup training data

Pixels=Images.flatten(start_dim=1,end_dim=2)
nData,nPixel=Pixels.shape
X_train=((Pixels-255/2.0)/(255)).to(device)
y_train=(labels-np.mean(labels))/(np.max(labels)-np.min(labels))
Y_train=torch.tensor(y_train.astype('float32')).unsqueeze(dim=1).to(device)


  • 訓練類神經網路

經過改變資料維度的正規化訓練,與多維分類問題同樣地進入類神經網路進行訓練。

raw-image
#-------------
# create neural network model
imgNeural=classNeural(nPixel,28,1).to(device)
torch.manual_seed(13)
loss_fn=nn.MSELoss() # MSE
optimizer=torch.optim.AdamW(imgNeural.parameters(),lr=0.01)
#-------------
# training neural network
import time
for epoche in range(500):
imgNeural.train()
Y_pred=imgNeural(X_train)
loss=loss_fn(Y_pred,Y_train)
optimizer.zero_grad()
loss.backward()
optimizer.step()
  • 圖形分類預測結果

類神經訓練完之後,將原來的 16 組訓練資料丟進類神經網路預測結果;初步可以看到,類神經網路可以輕易地學習完成這 16 組圖形分類資料;這也說明了類神經網路具備圖形分類學習的基本能力。不過一般的圖形分類問題,資料量都相當地龐大,會需要更多的資料處理工具才能完成。

raw-image
#------------
# prediction
imgNeural.eval()
with torch.inference_mode():
Y_pred=imgNeural(X_train)
y_pred=Y_pred.squeeze(dim=1).to('cpu').numpy()
label_pred=np.round(y_pred*(np.max(labels)-np.min(labels))+np.mean(labels))
#------------
# plot
plt.scatter(range(16),labels,color='red',facecolor='none',label='Target')
plt.scatter(range(16),label_pred,color='blue',marker='x',label='Predition')
plt.xlabel('Sample #')
plt.ylabel('Classes')
showTick=np.arange(0,nData,1)
plt.xticks(ticks=showTick,labels=(showTick+1))
plt.yticks(ticks=range(len(train_data.classes)),labels=train_data.classes,fontsize=8)
plt.legend()
plt.grid()
plt.show()

當然也可以亂數選取圖形來分類,進行確認。

raw-image
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
imgNeural.eval()
with torch.inference_mode():
LabelOutput=imgNeural(PixelInput)
#---------- handle output tensor
labelOutput=LabelOutput.squeeze(dim=1).to('cpu').numpy()
labelPred=np.round(labelOutput*(np.max(labels)-np.min(labels))+np.mean(labels))
#---------- 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
發表第一個留言支持創作者!
甘果的沙龍 的其他內容
本文探討類神經網路在多元分類問題的應用,以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 的人工智慧開發者。
本文說明在安裝實體具有多核 GPU 的環境下,可以透過 Python 「多執行緒的」程式,讓 CPU 及 GPU 依照特性,各自同時進行運算,得到最好的算力配置。
本文探討類神經網路在多元分類問題的應用,以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 的人工智慧開發者。
本文說明在安裝實體具有多核 GPU 的環境下,可以透過 Python 「多執行緒的」程式,讓 CPU 及 GPU 依照特性,各自同時進行運算,得到最好的算力配置。
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
本文主要介紹,如何利用VAE變分自編碼器來訓練生成圖片。 訓練集資料將採用TF影像資料庫中的fashion_mnist VAE變分自編碼器簡單介紹 •VAE(Variational Auto-Encoder)中文名稱變分自編碼器,主要是一種將原始資料編碼到潛在向量空間,再編碼回來的神經網路。
Thumbnail
前言 讀了許多理論,是時候實際動手做做看了,以下是我的模型訓練初體驗,有點糟就是了XD。 正文 def conv(filters, kernel_size, strides=1): return Conv2D(filters, kernel_size,
Thumbnail
GNN發展背景 傳統的深度學習模型如在計算機視覺(CV)和自然語言處理(NLP)領域中極為成功,主要是處理結構化數據如影像和文本。這些數據類型通常具有固定且規律的結構,例如影像是由有序的像素點組成。然而,在真實世界中,許多數據是非結構化的,如化合物結構(原子和分子)。這些數據雖然具有一定的規則性,
Thumbnail
視覺層級並不侷限於平面設計,在用戶體驗及介面上更是一個重要的核心之一。視覺層級除了讓畫面的視覺編排更加精緻好看,更重要的功能是能讓畫面有效地被組織,讓觀者更容易理解。
Thumbnail
最近在嘗試使用不同的AI生圖方式混合出圖的方式,採用A平台的優點,並用B平台後製的手法截長補短,創造出自己更想要的小說場景,效果不錯,現在以這張圖為例,來講一下我的製作步驟。
Thumbnail
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
Thumbnail
學習如何使用 Tensorflow.js 的 COCO-SSD 模型在網頁上進行圖片物件辨識,包括基本使用方法、進階應用及實作範例,輕鬆辨識圖片中的人數和物件。
Thumbnail
本篇文章參考 Youtube 影片(...真實模型推薦...)內容,為大家找出影片中的模型,直接作圖測試,您直接連結過去,就可以在 TensorArt 內直接使用囉!
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
本文主要介紹,如何利用VAE變分自編碼器來訓練生成圖片。 訓練集資料將採用TF影像資料庫中的fashion_mnist VAE變分自編碼器簡單介紹 •VAE(Variational Auto-Encoder)中文名稱變分自編碼器,主要是一種將原始資料編碼到潛在向量空間,再編碼回來的神經網路。
Thumbnail
前言 讀了許多理論,是時候實際動手做做看了,以下是我的模型訓練初體驗,有點糟就是了XD。 正文 def conv(filters, kernel_size, strides=1): return Conv2D(filters, kernel_size,
Thumbnail
GNN發展背景 傳統的深度學習模型如在計算機視覺(CV)和自然語言處理(NLP)領域中極為成功,主要是處理結構化數據如影像和文本。這些數據類型通常具有固定且規律的結構,例如影像是由有序的像素點組成。然而,在真實世界中,許多數據是非結構化的,如化合物結構(原子和分子)。這些數據雖然具有一定的規則性,
Thumbnail
視覺層級並不侷限於平面設計,在用戶體驗及介面上更是一個重要的核心之一。視覺層級除了讓畫面的視覺編排更加精緻好看,更重要的功能是能讓畫面有效地被組織,讓觀者更容易理解。
Thumbnail
最近在嘗試使用不同的AI生圖方式混合出圖的方式,採用A平台的優點,並用B平台後製的手法截長補短,創造出自己更想要的小說場景,效果不錯,現在以這張圖為例,來講一下我的製作步驟。
Thumbnail
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
Thumbnail
學習如何使用 Tensorflow.js 的 COCO-SSD 模型在網頁上進行圖片物件辨識,包括基本使用方法、進階應用及實作範例,輕鬆辨識圖片中的人數和物件。
Thumbnail
本篇文章參考 Youtube 影片(...真實模型推薦...)內容,為大家找出影片中的模型,直接作圖測試,您直接連結過去,就可以在 TensorArt 內直接使用囉!