pytorch入門-神經網絡

神經網絡的基本骨架

import torch
from torch import nn #nn模塊是PyTorch中用于構建神經網絡模型的核心模塊。它提供了各種類和函數,可以幫助你定義和訓練神經網絡。class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__() #調用 super(Tudui, self).__init__() 初始化父類 nn.Module,這樣我們才能正常使用神經網絡模塊的功能。def forward(self,input):output = input + 1 #在 forward 方法中,定義了模型的前向傳播過程。輸入 input 加上 1,并將結果作為輸出返回。return outputtudui = Tudui()
x = torch.tensor(1.0)
output = tudui(x)
print(output)

卷積操作

import torch
import torch.nn.functional as F #torch.nn.functional模塊提供了一系列的函數,用于構建神經網絡的各種操作,如激活函數、損失函數、池化操作等。# torch.tensor是PyTorch中的一個類,用于創建多維數組或張量。它是使用PyTorch進行科學計算和深度學習的核心數據結構之一。
input = torch.tensor([[1, 2, 0, 3, 1],[0, 1, 2, 3, 1],[1, 2, 1, 0, 0],[5, 2, 3, 1, 1],[2, 1, 0, 1, 1]])kernel = torch.tensor([[1, 2, 1],[0, 1, 0],[2, 1, 0]])
#input是一個張量,通過調用torch.reshape(input, (1, 1, 5, 5))將其形狀重塑為(1, 1, 5, 5)。這意味著原先的張量形狀為(5, 5),重塑后的張量形狀為(1, 1, 5, 5)。
input = torch.reshape(input, (1, 1, 5, 5))
kernel = torch.reshape(kernel, (1, 1, 3, 3))output = F.conv2d(input, kernel, stride=1) #conv2d函數接收三個參數:input、kernel和stride。它執行了一個二維卷積操作,將輸入張量input與卷積核張量kernel進行卷積運算,并返回卷積結果。stride參數指定了卷積操作的步幅,默認為1。
print(output)output2 = F.conv2d(input, kernel, stride=2)
print(output2)output3 = F.conv2d(input, kernel, stride=1, padding=1)#padding參數用于在輸入張量的周圍添加零填充(zero-padding),以控制輸出的尺寸。通過在輸入的周圍添加零值像素,可以保持輸出具有與輸入相同的空間尺寸。
print(output3)

卷積層

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader #用于加載數據集的實用工具類。
from torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10(r"D:\PyCharm\learn_torch\dataset", train=False, transform=torchvision.transforms.ToTensor(),download=True)#加載CIFAR-10數據集。#DataLoader類主要用于將數據集分割成小批量數據并提供數據加載的功能。它接收兩個主要參數:dataset和batch_size。
# dataset參數是一個數據集對象,可以是之前加載的CIFAR-10數據集 (torchvision.datasets.CIFAR10) 或其他自定義的數據集對象。
# batch_size參數指定了每個小批量數據的樣本數量。在這個例子中,batch_size被設置為64,表示每個小批量數據中包含64個樣本。
dataLoader = DataLoader(dataset, batch_size=64)class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()#Conv2d 類需要指定一些參數來定義卷積層的屬性:# in_channels:輸入張量的通道數,這里為 3,表示輸入是 RGB 彩色圖像,具有 3 個通道。# out_channels:輸出張量的通道數,這里為 6,表示輸出將包含 6 個通道。# kernel_size:卷積核的大小,這里為 3,表示卷積核的寬度和高度都為 3。# stride:卷積的步幅大小,這里為 1,表示每次卷積的滑動步幅為 1。# padding:零填充的大小,這里為 0,表示不對輸入進行零填充。self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)#forward(self, x) 是模型類中的方法,用于定義模型的前向傳播過程。在該方法中,輸入張量 x 經過模型的各個層(如卷積層、池化層、全連接層等)進行計算,并返回最終的輸出結果。# x = self.conv1(x)# x = torch.relu(x)# x = x.view(x.size(0), -1)# x = self.fc1(x)def forward(self,x):x = self.conv1(x) #這行代碼將輸入張量 x 通過卷積層 conv1 進行卷積操作,更新 x 的值為卷積操作的結果。return xtudui = Tudui()write = SummaryWriter(r"../logs")#創建了一個 SummaryWriter 對象,用于將訓練過程中的數據寫入到指定的日志目錄中。step = 0
for data in dataLoader:#這行代碼將 data 數據拆分為 imgs 和 target 兩個部分。# 假設 data 是一個包含圖像和標簽的數據集,在進行訓練或測試時,常常需要將數據拆分為圖像和對應的標簽。這樣可以方便地對圖像進行處理和輸入模型,同時獲取對應    的標簽用于計算損失或評估模型性能。# imgs 表示圖像數據,target 表示對應的標簽數據,可能是一個類別標簽、一個數字標簽或者其他形式的標簽。imgs, target = dataoutput = tudui(imgs)#將圖像數據 imgs 作為輸入傳遞給名為 tudui 的函數(或模型),并將輸出結果賦值給變量 output。print(imgs.shape)print(output.shape)#torch.Size([64, 3, 32, 32])write.add_images("input", imgs, step)#torch.Size([64, 6, 30, 30])output = torch.reshape(output, (-1, 3, 30, 30))#這行代碼將名稱為 “input” 的圖像數據 imgs 添加到 SummaryWriter 對象中,用于生成可視化的輸入圖像。# 在使用 TensorBoard 進行可視化時,可以通過 SummaryWriter 對象的 add_images 方法將圖像數據寫入到日志文件中,以便后續在 TensorBoard 中展示和分  析。# 第一個參數是圖像的名稱,可以是任意字符串,用于在# TensorBoard# 中標識不同的圖像。# 第二個參數是圖像數據,在這里是# imgs# 變量,可能是一個張量或數組,表示一批圖像數據。圖像數據的形狀通常是[batch_size, channels, height, width]。# 第三個參數是步數 / 迭代次數,用于在# TensorBoard# 中確定圖像數據對應的時間或步數。這個參數是可選的,如果不提供,則默認使用# SummaryWriter對象的全局步數。write.add_images("output",output, step)step = step + 1

最大池化

import torch
import torchvision
from torch import nn
from torch.nn import MaxPool2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10(r"../dataset", train=False, download=True, transform=torchvision.transforms.ToTensor())dataloader = DataLoader(dataset, batch_size=64)input = torch.tensor([[1, 2, 0, 3, 1],[0, 1, 2, 3, 1],[1, 2, 1, 0, 0],[5, 2, 3, 1, 1],[2, 1, 0, 1, 1]],dtype=torch.float32)#指定了數據的類型為 torch.float32,這意味著張量中的元素將被解釋為 32 位浮點數。# 第一個維度(-1):將根據其他維度確定,以使得重塑后的總元素數量與原始張量保持一致。
# 第二個維度(1):表示每個批次中的通道數為 1。
# 第三個維度(5):表示每個圖像的高度為 5。
# 第四個維度(5):表示每個圖像的寬度為 5。
input = torch.reshape(input, (-1, 1, 5, 5))print(input.shape)class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()#池化操作是深度學習中常用的一種操作,用于減小特征圖的空間尺寸,從而降低模型參數量和計算量,并提取出更顯著的特征。# kernel_size = 3:池化窗口的大小為 3x3。這意味著在進行池化操作時,將以3x3的窗口滑動在輸入特征圖上,每次選取窗口內的最大值作為輸出。# ceil_mode = False:在默認情況下,當輸入特征圖的大小除以池化窗口的大小時存在小數部分時,輸出特征圖的大小將向下取整。即輸入特征圖大小與輸出特征圖          大小之間存在下取整關系。設為False表示不進行這種向上取整操作。self.maxpool = MaxPool2d(kernel_size=3, ceil_mode=False)def forward(self, input):output = self.maxpool(input)return outputtudui = Tudui()
# output = tudui(input)
# print(output)write = SummaryWriter(r"../logs--maxpool")
step = 0
for data in dataloader:imgs, target = datawrite.add_images("input",imgs,step)output = tudui(imgs)write.add_images("output", output, step)step = step + 1write.close()

非線性激活

import torch
import torchvision
from torch import nn
from torch.nn import ReLU, Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterinput = torch.tensor([[1, -0.5],[-1, 3]])output = torch.reshape(input, (-1, 1, 2, 2))
print(output.shape)dataset = torchvision.datasets.CIFAR10("../dataset", train=False, download=True,transform=torchvision.transforms.ToTensor())
datalodar = DataLoader(dataset, batch_size=64)class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.relu1 = ReLU() # ReLU(Rectified Linear Unit)是深度學習中常用的一種非線性激活函數。它的作用是在神經網絡的模型中引入非線性映射,以增強模型的表達能力。self.sigmoid1 = Sigmoid() # Sigmoid激活函數是一種常用的非線性激活函數,用于在神經網絡中引入非線性變換。它的輸出范圍在 (0, 1) 之間,將輸入值映射到概率形式的輸出。def forward(self, input):output = self.sigmoid1(input)return outputtudui = Tudui()writer = SummaryWriter("../log_relu")
step = 0for data in datalodar:imgs, target = datawriter.add_images("input", imgs, global_step=step)output = tudui(imgs)writer.add_images("output", imgs, global_step=step)step = step + 1writer.close()

線性層及其他層介紹

import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoaderdataset = torchvision.datasets.CIFAR10("../dataset",train=False,transform=torchvision.transforms.ToTensor(),download = True)dataloader = DataLoader(dataset, batch_size=64)
class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()#self.linear是類中的一個成員變量,它被賦值為一個Linear對象。Linear對象的構造函數需要兩個參數:輸入特征的大小和輸出特征的大小。在這里,輸入特征的大小為196608,輸出特征的大小為10。#linear = Linear(in_features, out_features)# output = linear(input)#in_features 表示輸入的特征維度大小,out_features 表示輸出的特征維度大小。self.linear = Linear(196608,10)def forward(self,input):output = self.linear(input)return outputtudui = Tudui()for data in dataloader:imgs, targets = dataprint(imgs.shape)# output = torch.reshape(imgs, (1, 1, 1, -1))output = torch.flatten(imgs)#通過調用 torch.flatten 函數,可以將輸入張量 imgs 展平成一個一維張量。展平后的張量 output 中的元素順序與原始張量保持一致,只是維度形狀變為一維。print(output.shape)output = tudui(output)print(output.shape)

神經網絡搭建和Sequential的使用

import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.tensorboard import SummaryWriterclass Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()# self.conv1 = Conv2d(3, 32, 5, padding=2)# self.maxpool1 = MaxPool2d(2)# self.conv2 = Conv2d(32, 32, 5, padding=2)# self.maxpool2 = MaxPool2d(2)# self.conv3 = Conv2d(32, 64, 5, padding=2)# self.maxpool3 = MaxPool2d(2)# self.flatten = Flatten()# self.linear1 = Linear(1024, 64)# self.linear2 = Linear(64, 10)# 這個模型使用了Sequential模型,并依次添加了多個層來構建網絡結構。每個層的作用如下:# Conv2d(3, 32, 5, padding=2):卷積層,輸入通道數為3,輸出通道數為32,卷積核大小為5x5,填充為2。# MaxPool2d(2):池化層,池化核大小為2x2。# Conv2d(32, 32, 5, padding=2):卷積層,輸入通道數為32,輸出通道數為32,卷積核大小為5x5,填充為2。# MaxPool2d(2):池化層,池化核大小為2x2。# Conv2d(32, 64, 5, padding=2):卷積層,輸入通道數為32,輸出通道數為64,卷積核大小為5x5,填充為2。# MaxPool2d(2):池化層,池化核大小為2x2。# Flatten():展平層,用于將多維的輸入數據展平為一維。# Linear(1024, 64):全連接層,輸入維度為1024,輸出維度為64。# Linear(64, 10):全連接層,輸入維度為64,輸出維度為10。self.modul1 = Sequential(Conv2d(3, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 64, 5, padding=2),MaxPool2d(2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self, x):# x = self.conv1(x)# x = self.maxpool1(x)# x = self.conv2(x)# x = self.maxpool2(x)# x = self.conv3(x)# x = self.maxpool3(x)# x = self.flatten(x)# x = self.linear1(x)# x = self.linear2(x)x = self.modul1(x)return xtudui = Tudui()
print(tudui)
input = torch.ones(64, 3, 32, 32)
output = tudui(input)
print(output.shape)writer = SummaryWriter("../logs_seq")
writer.add_graph(tudui, input)
writer.close()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38908.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38908.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38908.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構入門指南:二叉樹

目錄 文章目錄 前言 1. 樹的概念及結構 1.1 樹的概念 1.2 樹的基礎概念 1.3 樹的表示 1.4 樹的應用 2. 二叉樹 2.1 二叉樹的概念 2.2 二叉樹的遍歷 前言 在計算機科學中,數據結構是解決問題的關鍵。而二叉樹作為最基本、最常用的數據結構之一,不僅在算法…

java對大文件分片上傳

這里記錄一下,Java對大文件的切分,和后端接口分片上傳的實現邏輯 正常,前后端分離的項目其實是前端去切分文件,后端接口接收到切分后的分片文件去合并,這里都用java來記錄一下。特別說明:我這里用的是zip包…

vue+java實現在線播放mp4視頻

java: 讀取本地視頻文件的流然后給response的輸出流 File file new File("/Users/zhangqingtian/Documents/水庫/Floodforecast/static/" videoName);BufferedInputStream inputStream new BufferedInputStream(new FileInputStream(file));response.setContentT…

ReactDOM模塊react-dom/client沒有默認導出報錯解決辦法

import ReactDOM 模塊“"E:/Dpandata/Shbank/rt-pro/node_modules/.pnpm/registry.npmmirror.comtypesreact-dom18.2.7/node_modules/types/react-dom/client"”沒有默認導出。 解決辦法 只需要在tsconfig.json里面添加配置 "esModuleInterop": true 即…

【C++】queue容器

1.queue容器基本概念 2.queue常用接口 #include <iostream> using namespace std;//隊列queue #include<queue>//創建Person類 class Person { public:Person(string name, int age){this->m_Name name;this->m_Age age;}string m_Name; //姓名int m_Age; …

mysql創建新用戶并授權

目錄 前言登錄到mysql創建用戶用戶授權更改用戶密碼參考 前言 略 登錄到mysql shell> mysql -h127.0.0.1 -P3306 -uroot -p******創建用戶 mysql> CREATE USER abc% IDENTIFIED BY 123456;用戶授權 mysql> GRANT all privileges ON ruoyi.* TO abc%;用戶ruoyi擁有…

優維低代碼實踐:自定義模板

優維低代碼技術專欄&#xff0c;是一個全新的、技術為主的專欄&#xff0c;由優維技術委員會成員執筆&#xff0c;基于優維7年低代碼技術研發及運維成果&#xff0c;主要介紹低代碼相關的技術原理及架構邏輯&#xff0c;目的是給廣大運維人提供一個技術交流與學習的平臺。 優維…

禾賽科技Q2營收交付雙新高,國產激光雷達從量變到質變

隨著2022年激光雷達元年、2023年城市智能輔助駕駛&#xff08;NOA&#xff09;元年相繼到來&#xff0c;激光雷達產業迎來爆發期。 今年以來&#xff0c;自動駕駛公司、汽車制造商以及移動出行公司等各路人馬積極推動城市級別的智能輔助駕駛全面落地&#xff0c;北京、上海、深…

通過css設置filter 屬性,使整個頁面呈現灰度效果,讓整個網頁變灰

通過css設置filter 屬性設置頁面整體置灰 效果圖: 通過設置 filter 屬性為 grayscale(100%)&#xff0c;頁面中的所有元素都會被應用灰色濾鏡效果&#xff0c;使整個頁面呈現灰度效果。 <style type"text/css"> html { filter: grayscale(100%); -webkit-f…

git pull 某一個文件或文件夾

QQ: 2967732156 背景&#xff1a; 在使用Oracle VM VirtualBox&#xff0c;進行Linux開發時&#xff0c;隨著使用內存越來越少&#xff0c;空間已不足拉取整個代碼庫。 Ubuntu1604內存夠&#xff0c;Ubuntu18.04內存不夠。 思路&#xff1a; 第一步&#xff1a;從問題本身…

TB/TM-商品詳情原數據(APP)

一、接口參數說明&#xff1a; item_get_app-獲得TB/TMapp商品詳情原數據&#xff0c;點擊更多API調試&#xff0c;請移步注冊API賬號點擊獲取測試key和secret 公共參數 請求地址: https://api-gw.onebound.cn/taobao/item_get_app 名稱類型必須描述keyString是調用key&…

考研 408 | 【計算機網絡】 應用層

導圖 網絡應用模型 客戶/服務器&#xff08;c/s&#xff09;模型 P2P模型 DNS 域名 域名服務器 域名解析過程 文件傳輸協議FTP FTP服務器和用戶端 FTP工作原理 電子郵件 電子郵件的信息格式 組成結構 郵件服務器的功能&#xff1a; 1.發送&接收郵件 2.給發件人報告郵…

使用windows Api簡單驗證ISO9660文件格式,以及裝載和卸載鏡像文件

使用IIsoImageManager接口簡單驗證ISO鏡像文件正確性,使用AttachVirtualDisk裝載ISO鏡像文件,和使用DetachVirtualDisk卸載,(只支持windows 8及以上系統) 導讀 IIsoImageManager 驗證ISO文件正確性AttachVirtualDisk 裝載鏡像文件DetachVirtualDisk 卸載鏡像文件其他相關函…

《游戲編程模式》學習筆記(四) 觀察者模式 Observer Pattern

定義 觀察者模式定義了對象間的一種一對多的依賴關系&#xff0c;當一個對象的狀態發生改變時&#xff0c;所有依賴于它的對象都得到通知并被自動更新。 這是定義&#xff0c;看不懂就看不懂吧&#xff0c;我接下來舉個例子慢慢說 為什么我們需要觀察者模式 我們看一個很簡…

PAT (Advanced Level) 甲級 1004 Counting Leaves

點此查看所有題目集 A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child. Input Specification: Each input file contains one test case. Each case starts with a line containing 0<N<100, …

如何在iPhone手機上修改手機定位和模擬導航?

如何在iPhone手機上修改手機定位和模擬導航&#xff1f; English Location Simulator&#xff08;定位模擬工具&#xff09; 是一款功能強大的 macOS 應用&#xff0c;專為 iPhone 用戶設計&#xff0c;旨在修改手機定位并提供逼真的模擬導航體驗。無論是為了保護隱私、測試位…

Angular 獨立組件入門

Angular 獨立組件入門 如果你正在學習 Angular&#xff0c;那么你可能已經聽說過獨立組件&#xff08;Component&#xff09;。顧名思義&#xff0c;獨立組件就是可以獨立使用和管理的組件&#xff0c;它們能夠被包含在其他組件中或被其他組件引用。 在本文中&#xff0c;我們…

【Unity腳本開源】記錄鼠標按下的位置和移動的距離來進行物體的旋轉,并在鼠標釋放后將物體恢復到初始旋轉位置

??作者&#xff1a;白日參商 &#x1f935;?♂?個人主頁&#xff1a;白日參商主頁 ??堅持分析平時學習到的項目以及學習到的軟件開發知識&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

go-安裝部署

一、安裝go 詳細安裝方式可以查看官網 # 下載 wget https://golang.google.cn/dl/go1.21.0.linux-amd64.tar.gz # 解壓縮 tar -xzf go1.21.0.linux-amd64.tar.gz # 遷移目錄 mv go /usr/local # 配置環境變量 export PATH$PATH:/usr/local/go/bin # 檢查go的版本 go version有…

Python中的字符串與字符編碼

Hello&#xff0c;這里是Token_w的博客&#xff0c;歡迎您的到來 今天文章講解的是Python中的字符串與字符編碼&#xff0c;其中有基礎的理論知識講解&#xff0c;也有實戰中的應用講解&#xff0c;希望對你有所幫助 整理不易&#xff0c;如對你有所幫助&#xff0c;希望能得到…