日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Pytorch神经网络实战案例】06 逻辑回归拟合二维数据

發布時間:2024/7/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Pytorch神经网络实战案例】06 逻辑回归拟合二维数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 邏輯回歸與擬合過程

1.1 準備數據-code_01_moons.py(第1部分)

import sklearn.datasets import torch import numpy as np import matplotlib.pyplot as plt from LogicNet_fun import LogicNet,plot_losses,predict,plot_decision_boundary# 1.1 準備數據 np.random.seed(0) #設置隨機種子 X,Y = sklearn.datasets.make_moons(200,noise=0.2)#生成兩組半圓形數據 arg = np.squeeze(np.argwhere(Y==0),axis=1) #獲取第1組數據索引 arg2 = np.squeeze(np.argwhere(Y==1),axis=1) #獲取第2組數據索引 plt.title("moons data") #設置可視化標題 plt.scatter(X[arg,0],X[arg,1],s=100,c='b',marker='+',label='data1') #顯示第一組數據索引 plt.scatter(X[arg2,0],X[arg2,1],s=40,c='r',marker='o',label='data2')#顯示第二組數據索引 plt.legend() #顯示圖例 plt.show()

1.2 定義網絡模型-LogicNet_fun.py(第1部分)

# 1.2 定義網絡模型 class LogicNet(nn.Module): #繼承nn.Module類,構建網絡模型def __init__(self,inputdim,hiddendim,outputdim): #初始化網絡結構 ===》即初始化接口部分super(LogicNet,self).__init__()self.Linear1 = nn.Linear(inputdim,hiddendim) #定義全連接層self.Linear2 = nn.Linear(hiddendim,outputdim) #定義全連接層self.criterion = nn.CrossEntropyLoss() #定義交叉熵函數def forward(self,x):# 搭建用兩個全連接層組成的網絡模型 ===》 即正向接口部分:將網絡層模型結構按照正向傳播的順序搭建x = self.Linear1(x)# 將輸入傳入第一個全連接層x = torch.tanh(x)# 將第一個全連接層的結果進行非線性變化x = self.Linear2(x)# 將網絡數據傳入第二個全連接層return xdef predict(self,x):# 實現LogicNet類的預測窗口 ===》 即預測接口部分:利用搭建好的正向接口,得到模型預測結果#調用自身網絡模型,并對結果進行softmax()處理,分別的出預測數據屬于每一個類的概率pred = torch.softmax(self.forward(x),dim=1)# 將正向結果進行softmax(),分別的出預測結果屬于每一個類的概率return torch.argmax(pred,dim=1)# 返回每組預測概率中最大的索引def getloss(self,x,y):# 實現LogicNet類的損失值接口 ===》 即損失值計算接口部分:計算模型的預測結果與真實值之間的誤差,在反向傳播時使用y_pred = self.forward(x)loss = self.criterion(y_pred,y)# 計算損失值的交叉熵return loss

1.3 實例化網絡模型-code_01_moons.py(第2部分)

# 1.3 搭建網絡模型 model = LogicNet(inputdim=2,hiddendim=3,outputdim=2) #實例化模型 輸入數據的維度、隱藏節點的數量、模型最終結果的分類數 optimizer = torch.optim.Adam(model.parameters(),lr=0.01) # 定義優化器 在反向傳播時使用

1.4 神經網絡的訓練模型-code_01_moons.py(第3部分)

#1.4 訓練模型 xt = torch.from_numpy(X).type(torch.FloatTensor) #將數據轉化為張量形式 yt = torch.from_numpy(Y).type(torch.LongTensor) epochs = 10000 #訓練次數 losses = [] # 損失值列表 for i in range(epochs):loss = model.getloss(xt,yt)losses.append(loss.item())optimizer.zero_grad() #梯度清零# loss.backword() 寫錯了 # 反向傳播loss.backward()# 反向傳播的損失值optimizer.step()# 更新參數

1.5?訓練結果的可視化實現

1.5.1 定義可視化函數-LogicNet_fun.py(第2部分)

# 1.5 訓練可視化 def moving_average(a,w=10): #計算移動平均損失值if len(a) < w:return a[:]return [val if idx < w else sum(a[(idx - w):idx]) / w for idx, val in enumerate(a)]def moving_average_to_simp(a,w=10): #if len(a) < w:return a[:]val_list = []for idx, val in enumerate(a):if idx < w:# 如果列表 a 的下標小于 w, 直接將元素添加進 xxx 列表val_list.append(val)else:# 向前取 10 個元素計算平均值, 添加到 xxx 列表val_list.append(sum(a[(idx - w):idx]) / w)def plot_losses(losses):avgloss = moving_average(losses)#獲得損失值的移動平均值plt.figure(1)plt.subplot(211)plt.plot(range(len(avgloss)),avgloss,'b--')plt.xlabel('step number')plt.ylabel('Training loss')plt.title('step number vs Training loss')plt.show()

1.5.2 調用可視化函數-code_01_moons.py(第4部分)

#1.5 訓練可視化 plot_losses(losses)

1.6 網絡模型評估即預測精度計算-code_01_moons.py(第5部分)

#1.6 模型評估 from sklearn.metrics import accuracy_score print(accuracy_score(model.predict(xt),yt))

1.7?預測結果模型可視化

1.7.1 可視化函數構建--LogicNet_fun.py(第3部分)

# 1.7 數據可視化模型 def predict(x): #封裝支持Numpy的預測接口x = torch.from_numpy(x).type(torch.FloatTensor)model = LogicNet(inputdim=2, hiddendim=3, outputdim=2)ans = model.predict(x)return ans.numpy()def plot_decision_boundary(pred_func,X,Y): #在直角模型中實現預測結果的可視化#計算范圍x_min ,x_max = X[:,0].min()-0.5 , X[:,0].max()+0.5y_min ,y_max = X[:,1].min()-0.5 , X[:,1].max()+0.5h=0.01xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))#根據數據輸入進行預測Z = pred_func(np.c_[xx.ravel(),yy.ravel()])Z = Z.reshape(xx.shape)#將數據的預測結果進行可視化plt.contourf(xx,yy,Z,cmap=plt.cm.Spectral)plt.title("Linear predict")arg = np.squeeze(np.argwhere(Y==0),axis=1)arg2 = np.squeeze(np.argwhere(Y==1),axis=1)plt.scatter(X[arg,0],X[arg,1],s=100,c='b',marker='+')plt.scatter(X[arg2,0],X[arg2,1],s=40,c='r',marker='o')plt.show()

1.7.2 可視化函數調用--code_01_moons.py(第6部分)

# 1.7 數據預測可視化模型 plot_decision_boundary(lambda x:predict(x),xt.numpy(),yt.numpy())

2 總結與回顧

2.1 深度學習的步驟

準備數據、搭建網絡模型、訓練模型、使用及評估模型

2.1.1 概述步驟

將任務中的數據進行收集整理,通過建立合適的網絡模型進行預測,在構建過程中通過一定次數的迭代學習數據特征來行程可用的數據模型,最后就是使用構建好的模型來解決實際問題。

2.2 訓練模型

2.3 模型是如何訓練的?

?

3 代碼匯總

3.1?code_01_moons.py

import sklearn.datasets import torch import numpy as np import matplotlib.pyplot as plt from LogicNet_fun import LogicNet,plot_losses,predict,plot_decision_boundary# 1.1 準備數據 np.random.seed(0) #設置隨機種子 X,Y = sklearn.datasets.make_moons(200,noise=0.2)#生成兩組半圓形數據 arg = np.squeeze(np.argwhere(Y==0),axis=1) #獲取第1組數據索引 arg2 = np.squeeze(np.argwhere(Y==1),axis=1) #獲取第2組數據索引 plt.title("moons data") #設置可視化標題 plt.scatter(X[arg,0],X[arg,1],s=100,c='b',marker='+',label='data1') #顯示第一組數據索引 plt.scatter(X[arg2,0],X[arg2,1],s=40,c='r',marker='o',label='data2')#顯示第二組數據索引 plt.legend() #顯示圖例 plt.show()# 1.3 搭建網絡模型 model = LogicNet(inputdim=2,hiddendim=3,outputdim=2) #實例化模型 輸入數據的維度、隱藏節點的數量、模型最終結果的分類數 optimizer = torch.optim.Adam(model.parameters(),lr=0.01) # 定義優化器 在反向傳播時使用#1.4 訓練模型 xt = torch.from_numpy(X).type(torch.FloatTensor) #將數據轉化為張量形式 yt = torch.from_numpy(Y).type(torch.LongTensor) epochs = 10000 #訓練次數 losses = [] # 損失值列表 for i in range(epochs):loss = model.getloss(xt,yt)losses.append(loss.item())optimizer.zero_grad() #梯度清零# loss.backword() 寫錯了 # 反向傳播loss.backward()# 反向傳播的損失值optimizer.step()# 更新參數#1.5 訓練可視化 plot_losses(losses)#1.6 模型評估 from sklearn.metrics import accuracy_score print(accuracy_score(model.predict(xt),yt))# 1.7 數據預測可視化模型 plot_decision_boundary(lambda x:predict(x),xt.numpy(),yt.numpy())

3.2?LogicNet_fun.py

import torch.nn as nn #引入torch網絡模型庫 import torch import numpy as np import matplotlib.pyplot as plt# 1.2 定義網絡模型 class LogicNet(nn.Module): #繼承nn.Module類,構建網絡模型def __init__(self,inputdim,hiddendim,outputdim): #初始化網絡結構 ===》即初始化接口部分super(LogicNet,self).__init__()self.Linear1 = nn.Linear(inputdim,hiddendim) #定義全連接層self.Linear2 = nn.Linear(hiddendim,outputdim) #定義全連接層self.criterion = nn.CrossEntropyLoss() #定義交叉熵函數def forward(self,x):# 搭建用兩個全連接層組成的網絡模型 ===》 即正向接口部分:將網絡層模型結構按照正向傳播的順序搭建x = self.Linear1(x)# 將輸入傳入第一個全連接層x = torch.tanh(x)# 將第一個全連接層的結果進行非線性變化x = self.Linear2(x)# 將網絡數據傳入第二個全連接層return xdef predict(self,x):# 實現LogicNet類的預測窗口 ===》 即預測接口部分:利用搭建好的正向接口,得到模型預測結果#調用自身網絡模型,并對結果進行softmax()處理,分別的出預測數據屬于每一個類的概率pred = torch.softmax(self.forward(x),dim=1)# 將正向結果進行softmax(),分別的出預測結果屬于每一個類的概率return torch.argmax(pred,dim=1)# 返回每組預測概率中最大的索引def getloss(self,x,y):# 實現LogicNet類的損失值接口 ===》 即損失值計算接口部分:計算模型的預測結果與真實值之間的誤差,在反向傳播時使用y_pred = self.forward(x)loss = self.criterion(y_pred,y)# 計算損失值的交叉熵return loss# 1.5 訓練可視化 def moving_average(a,w=10): #計算移動平均損失值if len(a) < w:return a[:]return [val if idx < w else sum(a[(idx - w):idx]) / w for idx, val in enumerate(a)]def moving_average_to_simp(a,w=10): #if len(a) < w:return a[:]val_list = []for idx, val in enumerate(a):if idx < w:# 如果列表 a 的下標小于 w, 直接將元素添加進 xxx 列表val_list.append(val)else:# 向前取 10 個元素計算平均值, 添加到 xxx 列表val_list.append(sum(a[(idx - w):idx]) / w)def plot_losses(losses):avgloss = moving_average(losses)#獲得損失值的移動平均值plt.figure(1)plt.subplot(211)plt.plot(range(len(avgloss)),avgloss,'b--')plt.xlabel('step number')plt.ylabel('Training loss')plt.title('step number vs Training loss')plt.show()# 1.7 數據可視化模型 def predict(x): #封裝支持Numpy的預測接口x = torch.from_numpy(x).type(torch.FloatTensor)model = LogicNet(inputdim=2, hiddendim=3, outputdim=2)ans = model.predict(x)return ans.numpy()def plot_decision_boundary(pred_func,X,Y): #在直角模型中實現預測結果的可視化#計算范圍x_min ,x_max = X[:,0].min()-0.5 , X[:,0].max()+0.5y_min ,y_max = X[:,1].min()-0.5 , X[:,1].max()+0.5h=0.01xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))#根據數據輸入進行預測Z = pred_func(np.c_[xx.ravel(),yy.ravel()])Z = Z.reshape(xx.shape)#將數據的預測結果進行可視化plt.contourf(xx,yy,Z,cmap=plt.cm.Spectral)plt.title("Linear predict")arg = np.squeeze(np.argwhere(Y==0),axis=1)arg2 = np.squeeze(np.argwhere(Y==1),axis=1)plt.scatter(X[arg,0],X[arg,1],s=100,c='b',marker='+')plt.scatter(X[arg2,0],X[arg2,1],s=40,c='r',marker='o')plt.show()

總結

以上是生活随笔為你收集整理的【Pytorch神经网络实战案例】06 逻辑回归拟合二维数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一区二区福利 | 手机av电影在线 | 在线观看一区二区三区四区 | 国产三级黄色 | 姐姐你真棒插曲快来救救我电影 | 日韩精品高清在线观看 | 永久中文字幕 | 在线免费观看高清视频 | 午夜国产精品视频 | 一区二区三区91 | 国产综合网站 | 国产日本欧美在线观看 | 亚洲毛片在线观看 | 性色av蜜臀av浪潮av老女人 | 亚洲第一页综合 | 亚洲黄色第一页 | 日韩精品播放 | 欧美高清在线 | 91蝌蚪九色 | 免费观看色 | 久久国产综合 | 女人16一毛片| 91国自啪| aaaa级片 | 亚洲射吧| 色伊人久久 | 国产精品久久在线观看 | 朝桐光在线播放 | 亚洲欧美日韩图片 | 欧美激情va永久在线播放 | 日韩欧美精品在线观看 | 大陆日韩欧美 | 日韩欧美亚洲成人 | 殴美毛片 | 毛片无码免费无码播放 | 日本午夜一级 | 午夜免费看片 | 男男巨肉啪啪动漫3d | 在线cao | 免费a在线观看播放 | 成人免费观看视频 | 国产精品探花视频 | 精品久久人人妻人人做人人 | 人乳videos巨大吃奶 | 催眠调教艳妇成肉便小说 | a毛片视频| 色小说香蕉 | 电影《走路上学》免费 | 欧美亚洲免费 | 国产精品2区 | 欧美日韩 一区二区三区 | 国产精品成人av久久 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 五月天堂网 | 人妻视频一区二区三区 | 色四月| 日本在线视频www色 国产在线视频网址 | 中文字幕不卡一区 | 无码一区二区三区免费 | 久久久久一区二区三区 | 林天顾悦瑶笔趣阁 | 黑丝久久 | 伊人久久香 | 涩涩视频网站 | 中文字幕黑人 | 五月婷婷在线视频 | 老地方在线观看免费动漫 | 伊人久久亚洲综合 | 亚洲视频大全 | 麻豆91视频| 欧洲美一区二区三区亚洲 | 免费在线中文字幕 | 麻豆网| 日本性xxxxx| 亚洲女人18毛片水真多 | 亚洲另类色综合网站 | 中文字幕无码日韩专区免费 | 一级片在线免费 | 国产视频一区二区三区在线播放 | 亚洲av无码国产精品久久久久 | 免费看亚洲 | 色噜噜狠狠一区二区 | 一区二区三区在线观 | 欧美在线性 | 日韩无码专区 | av手机免费在线观看 | av日韩高清 | 欧美熟妇一区二区 | 日韩av专区 | 欧美天天性 | 国产成人精品一区二区无码呦 | 阿v视频在线免费观看 | 国产精品久久久久久久久久妞妞 | 亚洲视频你懂的 | 韩国美女视频在线观看18 | 四川一级毛毛片 | 强行侵犯视频在线观看 | 天堂精品一区二区三区 | 日本成人在线免费观看 |