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

更新於 2024/11/25閱讀時間約 10 分鐘

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

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

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

raw-image



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」的二元分類數值。

raw-image


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」代表預測內圓的結果。

raw-image


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」代表預測內圓的結果;可以看到以這個二元分類的問題來說,反饋類神經網路可以獲得相當完美的結果。

raw-image


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
4會員
17內容數
作者從國內主要的半導體公司退休,重回校園唸書;開始第三人生。分享退休投資規劃、科技產業經驗以及校園學習點滴。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
甘果的沙龍 的其他內容
本文介紹如何利用 PyTorch 和 CUDA,建立多變數類神經網路模型。特別的,文章以「Himmelblau function」為例,探討資料正規化及訓練資料型態轉換的過程,並說明如何在 GPU 上訓練類神經網路。分析訓練誤差值及模型的收斂情況,希望幫助讀者深入理解多變數類神經網路的應用與挑戰。
本文將介紹如何在NVIDIA Jetson 人工智慧平台上,利用PyTorch和CUDA實現反饋類神經網路的運算。探討如何將運算任務從 CPU 轉移到 GPU,包括數據搬移和網路訓練的步驟。內容涵蓋建立類神經網路、確認 CUDA裝置、有效地在GPU上進行訓練和運算,充分利用 GPU 的加速優勢。
本篇文章介紹如何使用 PyTorch 這個強大的工具程式庫來建立一個反饋類神經網路。從單變數的「墨西哥帽」模型學習,到設定類神經網路的結構和訓練方法,資料轉換、類神經網路創建以及訓練過程的步驟。此外,也分析訓練過程中的誤差趨勢,幫助理解模型性能,適合希望快速掌握 PyTorch 的人工智慧開發者。
本文說明在安裝實體具有多核 GPU 的環境下,可以透過 Python 「多執行緒的」程式,讓 CPU 及 GPU 依照特性,各自同時進行運算,得到最好的算力配置。
本文描敘如何配合 nVidia Jetson Orin Nano 的多核心 GPU 的裝置,利用 PyTorch 來作 CUDA python 程式開發。
本篇文章介紹如何在 Jetson Nano 環境 Ubuntu 2.0 使用 git 及 github.com 進行版本控管。文章快速說明如何安裝、建立版本控管目錄及使用常用的指令。透過簡單的步驟,讀者將能夠有效地管理其程式碼版本,提升開發效率。
本文介紹如何利用 PyTorch 和 CUDA,建立多變數類神經網路模型。特別的,文章以「Himmelblau function」為例,探討資料正規化及訓練資料型態轉換的過程,並說明如何在 GPU 上訓練類神經網路。分析訓練誤差值及模型的收斂情況,希望幫助讀者深入理解多變數類神經網路的應用與挑戰。
本文將介紹如何在NVIDIA Jetson 人工智慧平台上,利用PyTorch和CUDA實現反饋類神經網路的運算。探討如何將運算任務從 CPU 轉移到 GPU,包括數據搬移和網路訓練的步驟。內容涵蓋建立類神經網路、確認 CUDA裝置、有效地在GPU上進行訓練和運算,充分利用 GPU 的加速優勢。
本篇文章介紹如何使用 PyTorch 這個強大的工具程式庫來建立一個反饋類神經網路。從單變數的「墨西哥帽」模型學習,到設定類神經網路的結構和訓練方法,資料轉換、類神經網路創建以及訓練過程的步驟。此外,也分析訓練過程中的誤差趨勢,幫助理解模型性能,適合希望快速掌握 PyTorch 的人工智慧開發者。
本文說明在安裝實體具有多核 GPU 的環境下,可以透過 Python 「多執行緒的」程式,讓 CPU 及 GPU 依照特性,各自同時進行運算,得到最好的算力配置。
本文描敘如何配合 nVidia Jetson Orin Nano 的多核心 GPU 的裝置,利用 PyTorch 來作 CUDA python 程式開發。
本篇文章介紹如何在 Jetson Nano 環境 Ubuntu 2.0 使用 git 及 github.com 進行版本控管。文章快速說明如何安裝、建立版本控管目錄及使用常用的指令。透過簡單的步驟,讀者將能夠有效地管理其程式碼版本,提升開發效率。
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
本文介紹了人工智慧(AI)及機器學習(ML)的基本概念和關係,探討了數據在機器學習中的重要性,以及深度學習和生成式人工智慧的應用。
Thumbnail
數據分析與解讀 隨著數據的爆炸式增長,能夠分析、解讀和應用數據的能力變得至關重要。這包括熟悉數據分析工具和技術,如統計學、數據挖掘、機器學習等。然而,僅靠短時間的數據分析並不足以提供深入見解。 要熟悉數據分析工具和技術,如統計學、數據挖掘和機器學習,可以從以下幾個方面入手: 基礎知識的學習
Thumbnail
呈上篇介紹如何訓練模型,此篇就主要介紹如何利用訓練好的模型來生成圖片 [深度學習][Python]DCGAN訓練生成手寫阿拉伯數字_生成篇 生成的結果 生成的圖片大小會根據,當初設置的生成器輸出大小來決定,當你使用生成對抗網絡(GAN)生成圖像時,生成器模型的最後一層通常會決定生成圖
Thumbnail
本文將延續上一篇文章,經由訓練好的GAN模型中的生成器來生成圖片 [深度學習][Python]訓練MLP的GAN模型來生成圖片_訓練篇 [深度學習][Python]訓練CNN的GAN模型來生成圖片_訓練篇 相較之下CNN的GAN生成的效果比較好,但模型也相對比較複雜,訓練時間花的也比較
Thumbnail
本文要探討AI的任務與實戰場景。AI技術已深入生活各層面,從違約預測到都市交通管理。AI任務主要有三類:數值型資料處理、自然語言處理(NLP)和電腦影像辨識。時間序列資料和強化學習方法(如AlphaGo)也引起廣泛關注。AI演算法和方法因應不同學派和技術發展而多樣化,了解這些基礎有助選擇適合研究方向
Thumbnail
最新的AI趨勢讓人眼花撩亂,不知要如何開始學習?本文介紹了作者對AI的使用和體驗,以及各類AI工具以及推薦的選擇。最後強調了AI是一個很好用的工具,可以幫助人們節省時間並提高效率。鼓勵人們保持好奇心,不停止學習,並提出了對健康生活和開心生活的祝福。
Thumbnail
本文介紹「思維鏈」(Chain of Thought,CoT)的提問技巧,探討其如何影響ChatGPT等生成式AI工具的表現。由於「思維鏈」能使機器人模仿人類推理的過程,因此,建議在使用大型語言模型進行提示工程時加入類似「讓我們循序思考」等提示詞,以提高多步驟問題的解決能力。
Thumbnail
本文科普了電信產業導入生成式 AI 的兩大使用範例,以及對生成式 AI 衍生服務的接受度。進一步探討了用戶自動化和網路自動化的重要性,並提出對於電信業導入生成式 AI 的展望。
Thumbnail
前言 上一篇討論到如何訓練出模型,此篇將說明Streamlit建立的簡單Web應用程式的解說 Streamlit網頁App_貓狗辨識 連結 程式碼Github連結 [機器學習]CNN學習MNIST 手寫英文字母資料,用網頁展現成果_模型訓練篇 如何連動github與stramlit可以參考
Thumbnail
streamlit與github連動程式庫,呈現即時預測手寫英文字母 整理了一下,先前學的機器學習利用Colab來訓練出能辨識手寫A~Z英文字母的模型,使用的模型是CNN(Convolutional Neural Network,CNN)模型 訓練好的模型,當然是要拿來應用,成果呈現
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
本文介紹了人工智慧(AI)及機器學習(ML)的基本概念和關係,探討了數據在機器學習中的重要性,以及深度學習和生成式人工智慧的應用。
Thumbnail
數據分析與解讀 隨著數據的爆炸式增長,能夠分析、解讀和應用數據的能力變得至關重要。這包括熟悉數據分析工具和技術,如統計學、數據挖掘、機器學習等。然而,僅靠短時間的數據分析並不足以提供深入見解。 要熟悉數據分析工具和技術,如統計學、數據挖掘和機器學習,可以從以下幾個方面入手: 基礎知識的學習
Thumbnail
呈上篇介紹如何訓練模型,此篇就主要介紹如何利用訓練好的模型來生成圖片 [深度學習][Python]DCGAN訓練生成手寫阿拉伯數字_生成篇 生成的結果 生成的圖片大小會根據,當初設置的生成器輸出大小來決定,當你使用生成對抗網絡(GAN)生成圖像時,生成器模型的最後一層通常會決定生成圖
Thumbnail
本文將延續上一篇文章,經由訓練好的GAN模型中的生成器來生成圖片 [深度學習][Python]訓練MLP的GAN模型來生成圖片_訓練篇 [深度學習][Python]訓練CNN的GAN模型來生成圖片_訓練篇 相較之下CNN的GAN生成的效果比較好,但模型也相對比較複雜,訓練時間花的也比較
Thumbnail
本文要探討AI的任務與實戰場景。AI技術已深入生活各層面,從違約預測到都市交通管理。AI任務主要有三類:數值型資料處理、自然語言處理(NLP)和電腦影像辨識。時間序列資料和強化學習方法(如AlphaGo)也引起廣泛關注。AI演算法和方法因應不同學派和技術發展而多樣化,了解這些基礎有助選擇適合研究方向
Thumbnail
最新的AI趨勢讓人眼花撩亂,不知要如何開始學習?本文介紹了作者對AI的使用和體驗,以及各類AI工具以及推薦的選擇。最後強調了AI是一個很好用的工具,可以幫助人們節省時間並提高效率。鼓勵人們保持好奇心,不停止學習,並提出了對健康生活和開心生活的祝福。
Thumbnail
本文介紹「思維鏈」(Chain of Thought,CoT)的提問技巧,探討其如何影響ChatGPT等生成式AI工具的表現。由於「思維鏈」能使機器人模仿人類推理的過程,因此,建議在使用大型語言模型進行提示工程時加入類似「讓我們循序思考」等提示詞,以提高多步驟問題的解決能力。
Thumbnail
本文科普了電信產業導入生成式 AI 的兩大使用範例,以及對生成式 AI 衍生服務的接受度。進一步探討了用戶自動化和網路自動化的重要性,並提出對於電信業導入生成式 AI 的展望。
Thumbnail
前言 上一篇討論到如何訓練出模型,此篇將說明Streamlit建立的簡單Web應用程式的解說 Streamlit網頁App_貓狗辨識 連結 程式碼Github連結 [機器學習]CNN學習MNIST 手寫英文字母資料,用網頁展現成果_模型訓練篇 如何連動github與stramlit可以參考
Thumbnail
streamlit與github連動程式庫,呈現即時預測手寫英文字母 整理了一下,先前學的機器學習利用Colab來訓練出能辨識手寫A~Z英文字母的模型,使用的模型是CNN(Convolutional Neural Network,CNN)模型 訓練好的模型,當然是要拿來應用,成果呈現