反饋類神經網路在二元分類問題中的應用

甘果-avatar-img
發佈於程式
更新 發佈閱讀 10 分鐘

除了單變數及多變數的連續浮點運算問題以外,反饋類神經網路也可以運用在機器學習 (Machine Learning) 中的非線性分類問題上面;有關機器學習的題目,Python 其實有相當多的資源可以用來作為範例。首先,我們先安裝在「scikit-learn」這個經常使用程式庫工具。

pip install scikit-learn
  • 模型學習目標

我們可以在「scikit-learn」這個程式庫中使用「make_circles()」這個函數來建立一個二元分類的問題。在這個函數產生會產生多組座標的資料形成二個圓形,作為二元分類的例子;其中外圓形的資料會標記為「0」,而內圓形的資料則被標記為「1」。內圈資料與外圈資距離中心距離可以使用參數「factor」來指定;而資料的亂數散佈則使用參數「noise」來指定。資料產生之後,再使用「train_test_split()」函數將訓練資料及測試資料依照 「factor」指 的比例來作亂數分割。以下圖來說,藍色的點代表外圓形的訓練資料,綠色的點為外圓形的測試資料;紅色點代表內圓形的訓練資料,褐色點代表內圓形的測試資料。

vocus|新世代的創作平台



from sklearn.datasets import make_circles
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import matplotlib.colors as Color

noData = 1000
x, label = make_circles(noData,noise=0.05,factor=0.6, random_state=13)
x_train, x_test, y_train, y_test = train_test_split(x,label,test_size=0.2,random_state=13)

colorTrain=Color.ListedColormap(['blue','red'])
colorTest=Color.ListedColormap(['green','brown'])
plt.scatter(x_train[:,0],x_train[:,1],c=y_train,cmap=colorTrain)
plt.scatter(x_test[:,0],x_test[:,1],c=y_test,cmap=colorTest)
plt.grid()
plt.show()
  • 轉換訓練資料

將「train_test_split()」的訓練資料轉換成 PyTorch/CUDA 使用的 tensor 資料型態。

import torch
X_train = torch.from_numpy(x_train.astype('float32')).to(device)
Y_train = torch.from_numpy(y_train.astype('float32')).unsqueeze(dim=1).to(device)
  • 建立類神經網路

在這裏仍然使用反饋類神經網路,並且創建一個 2 維度的類神經網路。

from torch import nn
device=torch.device('cpu')
if torch.cuda.is_available():
device=torch.device('cuda')
#------------
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)
#-------------
torch.manual_seed(13)
neural=classNeural(2,5,1).to(device)
loss_fn=nn.MSELoss() # MSE
optimizer=torch.optim.AdamW(neural.parameters(),lr=0.01)
  • 訓練類神經網路

反饋類神經網路的訓練與連續數的模型訓練並沒有不同;不過在最輸出預測值來觀察訓練誤差時,則加上「numpy.round()」函數,將類神經網路輸出的連續浮點數,轉換成「0」、「1」的二元分類數值。

vocus|新世代的創作平台


mae_y,mae_x=[],[]
for epoche in range(1500):
neural.train()
Y_pred=neural(X_train)
loss=loss_fn(Y_pred,Y_train)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoche % 50 ==0:
neural.eval()
with torch.inference_mode():
Y_pred=neural(X_train)
y_pred=np.round(Y_pred.squeeze(dim=1).to('cpu').numpy())

mae_y.append(np.mean(np.abs(y_train-y_pred)))
mae_x.append(epoche)
#---------------
plt.plot(mae_x,mae_y,'b--')
plt.grid()
plt.ylabel('Mean Absolute Error')
plt.show()
  • 訓練及測試結果

最後可以將訓練資料及測試資料輪入訓練好的類神經網路。在訓練的部份,藍色圓代表外圓的訓練資料,黃色「X」代表預測外圓的結果;紅色圓代表內圓的訓練資料,黑色「X」代表預測內圓的結果。

vocus|新世代的創作平台


neural.eval()
with torch.inference_mode():
Y_pred=neural(X_train)
y_pred=np.round(Y_pred.squeeze(dim=1).to('cpu').numpy())
#---------------
colorPred=Color.ListedColormap(['yellow','black'])
plt.title('Training')
plt.scatter(x_train[:,0],x_train[:,1],c=y_train,cmap=colorTrain,marker='o')
plt.scatter(x_train[:,0],x_train[:,1],c=y_pred,cmap=colorPred,marker='x',s=12)
plt.grid()
plt.show()

在測試的部份,藍色圓代表外圓的測試資料,這些資料並沒有參與到訓練的階段,但是類神經網路還是能來預測外圓的結果,而顯示在以黃色「X」的位置;同樣地,紅色圓代表內圓的測試資料,黑色「X」代表預測內圓的結果;可以看到以這個二元分類的問題來說,反饋類神經網路可以獲得相當完美的結果。

vocus|新世代的創作平台


neural.eval()
X_test=torch.from_numpy(x_test.astype('float32')).to(device)
with torch.inference_mode():
Y_pred=neural(X_test)
y_pred=np.round(Y_pred.squeeze(dim=1).to('cpu').numpy())
#--------------
mae=np.mean(np.abs(y_test-y_pred))
plt.title('Testing')
plt.scatter(x_test[:,0],x_test[:,1],c=y_test,cmap=colorTrain,marker='o')
plt.scatter(x_test[:,0],x_test[:,1],c=y_pred,cmap=colorPred,marker='x',s=12)

plt.grid()
plt.show()
留言
avatar-img
甘果的沙龍
12會員
39內容數
作者從國內主要的半導體公司退休,重回校園教學研究;開始第三人生。分享退休投資規劃、科技產業經驗以及校園學習點滴。
甘果的沙龍的其他內容
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
以一個雜魚測試工程師的角度來看int應用場景
Thumbnail
以一個雜魚測試工程師的角度來看int應用場景
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
Thumbnail
題目會給我們一顆二元樹的根節點, 要求我們對齊根節點正中央的虛擬分割線,反轉整顆二元樹。
Thumbnail
題目會給我們一顆二元樹的根節點, 要求我們對齊根節點正中央的虛擬分割線,反轉整顆二元樹。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。 請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。
Thumbnail
給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。 請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了list之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list 在這篇文章,會從最基礎的Singly linked list開始講起。 定義
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了list之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list 在這篇文章,會從最基礎的Singly linked list開始講起。 定義
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
題目會給我們節點總數目n、左子樹的關係陣列、右子樹的關係陣列,要求我們驗證在給定的條件下,能不能構成一顆合法的二元樹。
Thumbnail
題目會給我們節點總數目n、左子樹的關係陣列、右子樹的關係陣列,要求我們驗證在給定的條件下,能不能構成一顆合法的二元樹。
Thumbnail
題目敘述: 給定一個二維陣列的高與寬,並且給定起點位置座標。 請從起點位置開始順時針拜訪陣列元素,並且把沿路走過的座標記錄下來。 以陣列的形式返回答案。
Thumbnail
題目敘述: 給定一個二維陣列的高與寬,並且給定起點位置座標。 請從起點位置開始順時針拜訪陣列元素,並且把沿路走過的座標記錄下來。 以陣列的形式返回答案。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News