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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【Pytorch学习】用pytorch搭建第一个神经网络

發布時間:2025/4/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Pytorch学习】用pytorch搭建第一个神经网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡述

雖然使用過pytorch來搭建GANs,但是對于Pytorch其實還是不是很熟,這里想系統的學習下。順便再來做一下筆記。

學習網站

https://morvanzhou.github.io/tutorials/machine-learning/torch/3-01-regression/

大家直接看原文好了。這里我自己隨便寫寫便于我自己記憶。

擬合過程

數據

  • torch.unsqueeze(),會擴展這個維度。然后dim選擇的方向是列的方向。這里,就是將[1,2,3]變成了[[1], [2], [3]] 類似于這樣的操作。
  • torch.rand() 隨機數,范圍為(0,1)然后,輸入的內容為tuple表示規模
  • 因為有結構的問題,所以,這里就直接使用了.data先獲取數據之后,再用numpy()來轉成numpy中的數據類型。
  • 畫圖的話是基礎,這里就不講了。
import torch import matplotlib.pyplot as plt import torch.nn.functional as F # 激勵函數都在這x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # x data (tensor), shape=(100, 1) y = x.pow(2) + 0.2*torch.rand(x.size()) # noisy y data (tensor), shape=(100, 1)# 畫圖 plt.scatter(x.data.numpy(), y.data.numpy()) plt.show()

建立神經網絡

這里會寫一個類。就是神經網絡類。

  • 基類為torch.nn.Module

在pytorch的官方文檔中寫道

Base class for all neural network modules.
所有神經網絡的基類
Your models should also subclass this class.
你的模型也需要是這個類的子類
Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes:
Modules可以包括其他的模塊,允許按照樹形結構建造它。你也可以創立一個子模塊,通過下面的方式。(其實文檔下寫的標準方法,跟下面的是一樣的)

  • 通過super函數實現父類的初始化
  • 創建類變量,一個隱藏層的模型,一個輸出層模型
  • 丟進去的兩個參數,其實就都是。表示的是輸入這個小模塊的長度,再到輸出這個小模塊的長度。其實就說這個模型就是隱含著一個矩陣,做了一個矩陣乘法之后,就可以得到后面的東西了。
  • 重載了前向傳播的函數內容。
  • 表示,前向傳播的過程中,先經過隱藏層模型,再被relu的激活模型調用,之后,在通過輸出層。這就是整個前向傳播的流程了
class Net(torch.nn.Module): # 繼承 torch 的 Moduledef __init__(self, n_feature, n_hidden, n_output):super(Net, self).__init__() # 繼承 __init__ 功能# 定義每層用什么樣的形式self.hidden = torch.nn.Linear(n_feature, n_hidden) # 隱藏層線性輸出self.predict = torch.nn.Linear(n_hidden, n_output) # 輸出層線性輸出def forward(self, x): # 這同時也是 Module 中的 forward 功能# 正向傳播輸入值, 神經網絡分析出輸出值x = F.relu(self.hidden(x)) # 激勵函數(隱藏層的線性值)x = self.predict(x) # 輸出值return x

之后,我們就需要自己申明這樣的一個對象了。

net = Net(n_feature=1, n_hidden=10, n_output=1)

意思就是輸入層的節點數為1,隱藏層的節點為10,輸出層的節點為1

因為輸入層為x,而我們這里考慮的只是一個簡單的函數擬合問題,當然,這里就只有一個節點啦。這里,我們想起來,為什么之前需要有unsqueeze()操作了

訓練神經網絡

操作其實非常粗糙

構建一個優化器和損失函數

  • 下面選擇的優化方法是SGD(隨機梯度下降),然后,學習率為0.2
  • MSELoss 其實就是∑(xi,yi)(xi?yi)2\sum_{(xi, yi)}(x_i- y_i) ^2(xi,yi)?(xi??yi?)2。當然啦,有一個系數什么的。那個在確定了輸入的集合的規模情況下,這個就是無關緊要的啦。
optimizer = torch.optim.SGD(net.parameters(), lr=0.2) # 傳入 net 的所有參數, 學習率 loss_func = torch.nn.MSELoss() # 預測值和真實值的誤差計算公式 (均方差)

訓練這個模型

for t in range(100):prediction = net(x) # 喂給 net 訓練數據 x, 輸出預測值loss = loss_func(prediction, y) # 計算兩者的誤差optimizer.zero_grad() # 清空上一步的殘余更新參數值loss.backward() # 誤差反向傳播, 計算參數更新值optimizer.step() # 將參數更新值施加到 net 的 parameters 上

到這里,其實整個模型就擬合完了。

完整代碼(加上畫圖,生成gif)

  • 下面的包都是除了標準庫自帶的話,其他都是可以直接pip install的
import torch import matplotlib.pyplot as plt import torch.nn.functional as F # 激勵函數都在這 import os import shutil import imageioPNGFILE = './png/' if not os.path.exists(PNGFILE):os.mkdir(PNGFILE) else:shutil.rmtree(PNGFILE)os.mkdir(PNGFILE) x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # x data (tensor), shape=(100, 1) y = x.pow(2) + 0.2 * torch.rand(x.size()) # noisy y data (tensor), shape=(100, 1)# 畫圖 plt.scatter(x.data.numpy(), y.data.numpy())class Net(torch.nn.Module): # 繼承 torch 的 Moduledef __init__(self, n_feature, n_hidden, n_output):super(Net, self).__init__() # 繼承 __init__ 功能# 定義每層用什么樣的形式self.hidden = torch.nn.Linear(n_feature, n_hidden) # 隱藏層線性輸出self.predict = torch.nn.Linear(n_hidden, n_output) # 輸出層線性輸出def forward(self, x): # 這同時也是 Module 中的 forward 功能# 正向傳播輸入值, 神經網絡分析出輸出值x = F.relu(self.hidden(x)) # 激勵函數(隱藏層的線性值)x = self.predict(x) # 輸出值return xnet = Net(1, 10, 1) optimizer = torch.optim.SGD(net.parameters(), lr=.21) loss_func = torch.nn.MSELoss()name_list = []for t in range(100):prediction = net(x)loss = loss_func(prediction, y)optimizer.zero_grad()loss.backward()optimizer.step()if (t + 1) % 5:plt.cla()plt.scatter(x.data.numpy(), y.data.numpy())plt.plot(x.data.numpy(), prediction.data.numpy(), color='r')plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 20, 'color': 'red'})plt.savefig(PNGFILE + '%d.png' % t)name_list.append(PNGFILE + '%d.png' % t)generated_images = [] for png_path in name_list:generated_images.append(imageio.imread(png_path)) shutil.rmtree(PNGFILE) imageio.mimsave('net.gif', generated_images, 'GIF', duration=0.2)

總結

以上是生活随笔為你收集整理的【Pytorch学习】用pytorch搭建第一个神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 99久久精品日本一区二区免费 | 欧美黄色aaa | 亚洲一区中文字幕在线 | www.xxx日韩 | 99情趣网 | 韩国无码一区二区三区精品 | 99爱爱 | 久久精品超碰 | 日日射天天干 | 国产传媒一区二区三区 | 91精品国产91久久久久久 | 国产内谢 | www国产| 午夜精品成人 | 亚洲欧美日韩国产成人精品影院 | 91激情视频在线 | 国语粗话呻吟对白对白 | 91爱爱影院 | 亚洲精品乱码久久久久久蜜桃动漫 | 成人在线观看网址 | 日本网站免费观看 | 91插视频 | 免费中文字幕在线观看 | 色偷偷888欧美精品久久久 | 日韩欧美高清在线观看 | 午夜av中文字幕 | 日韩一区二区免费视频 | 91精品人妻一区二区三区蜜桃欧美 | 少妇真实被内射视频三四区 | 欧美爱爱网站 | 亚洲va久久久噜噜噜无码久久 | 国产欧美一区二区三区精品酒店 | 日本免费一区二区视频 | 国产视频你懂的 | 国产精品一国产精品 | 五月激情丁香 | 一区二区三区不卡在线观看 | 日韩a级在线观看 | 亚洲精品国产一区二 | 欧美怡红院 | 日本成人毛片 | 亚洲一区二区免费看 | 少妇太紧太爽又黄又硬又爽 | 色婷婷91 | 成人免费黄色大片v266 | 黄色一级片久久 | 日韩不卡中文字幕 | 波多野结衣福利视频 | 小视频在线免费观看 | 日产精品久久久久久久蜜臀 | 亚洲精品aⅴ中文字幕乱码 国产精品调教视频 | 一区二区av在线 | 午夜小网站 | 少妇性l交大片免潘金莲 | 亚洲涩涩图 | 欧美久久久久久久 | 天狂传说之巴啦啦小魔仙 | 黑人一区二区三区 | 国产精品自在线 | 亚洲最大黄色网址 | 亚洲福利一区二区 | 俺去日 | 精品日韩在线播放 | 午夜粉色视频 | 双性人bbww欧美双性 | 噜噜狠狠狠狠综合久久 | 国产亚洲精久久久久久无码苍井空 | 999伊人| 久久久午夜影院 | 中文字幕乱码一区二区三区 | 亚洲天堂一区二区三区 | 美女视频黄的免费 | 亚洲欧美日韩精品永久在线 | 三级欧美韩日大片在线看 | 亚洲三级中文字幕 | 色精品视频 | 亚洲一区二区免费 | 四虎网站 | 日本免费a级片 | 免费视频a | 国产片淫乱18一级毛片动态图 | 性欧美一区二区 | 成人精品一区二区三区在线 | 免费成人在线观看动漫 | 人妻久久久一区二区三区 | cao国产| 欧洲在线一区 | 少女忠诚电影高清免费 | 女女h百合无遮羞羞漫画软件 | 色漫在线观看 | 成人高清在线观看 | 天天摸天天射 | 亚洲砖区区免费 | 中国女人内精69xxxxxx | 久久精品国产亚洲a | 四季av一区二区夜夜嗨 | 国产亚洲欧美日韩精品 | 狠狠老司机| 婷婷资源网 |