深度學習3-pytorch學習

深度學習3-pytorch學習

Tensor 定義與 PyTorch 操作

1. Tensor 定義:

Tensor 是 PyTorch 中的數據結構,類似于 NumPy 數組。可以通過不同方式創建 tensor 對象:

import torch# 定義一個 1D Tensor
x1 = torch.Tensor([3, 4])# 定義一個 Float 類型的 Tensor
x2 = torch.FloatTensor([4, 4])# 使用正態分布隨機生成 Tensor
x3 = torch.randn(3, 4)
print(x1)
print(x2)
print(x3)
2. PyTorch 與 NumPy 之間的轉換:

可以使用 torch.from_numpy().numpy() 方法在 PyTorch Tensor 和 NumPy 數組之間進行轉換:

import numpy as np# 創建一個 NumPy 數組
numpy_tensor = np.random.randn(10, 20)# 將 NumPy 數組轉換為 PyTorch Tensor
pytorch_tensor = torch.from_numpy(numpy_tensor)# 將 PyTorch Tensor 轉換為 NumPy 數組
new_numpy_tensor = pytorch_tensor.numpy()
3. GPU 和 CPU 之間的轉換:

PyTorch 支持在 GPU 上進行計算,可以通過 .cuda() 方法將 Tensor 轉移到 GPU,使用 .cpu() 將其轉回 CPU:

x = torch.randn(3, 4)# 轉移到 GPU(GPU 0)
x_gpu = x.cuda(0)# 轉移到 GPU(GPU 1)
x_gpu = x.cuda(1)# 轉回 CPU
x_cpu = x_gpu.cpu()# 轉換為 NumPy 數組
x_array = x_gpu.cpu().numpy()
4. Tensor 的形狀和維度:

可以使用 .shape.size() 查看 Tensor 的維度和形狀,unsqueezesqueeze 方法分別用于增加和減少維度:

x = torch.randn(4, 3)# 查看形狀
print(x.shape)# 增加一個維度
x_unsqueezed = x.unsqueeze(1)
print(x_unsqueezed.shape)  # 形狀變為 [4, 1, 3]# 減少一個維度
x_squeezed = x_unsqueezed.squeeze()
print(x_squeezed.shape)  # 形狀變回 [4, 3]
5. Tensor 的高級操作:
  • 求最大值和索引:
max_index, max_value = torch.max(x, dim=1)  # 獲取每行的最大值和索引
print(max_index)
print(max_value)
  • 求和:
sum_tensor = torch.sum(x, dim=1, keepdim=True)  # 求每行的和
print(sum_tensor)
6. 求梯度:

Tensor 的 requires_grad_() 方法使得 Tensor 可以追蹤梯度,允許進行反向傳播(自動求導):

x = torch.tensor(3.0, requires_grad=True)
y = x**2# 求導
y.backward()# 打印梯度
print(x.grad)  # 輸出:tensor(6.)

注意: 求得的梯度會累積,如果不清零會對后續計算產生影響。

python復制編輯x.grad = torch.tensor(0.0)  # 清空梯度
y2 = x**2
y2.backward()
print(x.grad)  # 輸出:tensor(6.)
7. 創建不同類型的 Tensor:
# 創建全為 1 的 Tensor
tensor1 = torch.ones((10, 4))
print(tensor1)# 創建全為 0 的 Tensor
tensor2 = torch.zeros((10, 4))
print(tensor2)# 創建正態分布隨機值的 Tensor
tensor3 = torch.normal(0, 0.1, (4, 10, 4))
print(tensor3)
8. Variable:

為了構建神經網絡,PyTorch 引入了 Variable 類,主要用于對 Tensor 進行自動求導操作。Variable 包含了三個重要屬性:

  • .data:用于訪問 Tensor。
  • .grad:用于訪問梯度(導數)。
  • .grad_fn:描述如何計算這個 Variable。
from torch.autograd import Variable# 創建 Variable
x = Variable(torch.ones(2, 2), requires_grad=True)
y = Variable(torch.ones(2, 2), requires_grad=True)
z = torch.sum(x + y)# 查看數據
print(z.data)# 反向傳播
z.backward()# 打印梯度
print(x.grad)
9. 動態圖/靜態圖

PyTorch 采用動態圖(Dynamic Computation Graph)的方式,每次計算時都會重新構建計算圖,這樣便于調試,而 TensorFlow 則使用靜態圖(Static Computation Graph),在定義計算圖之后執行。這使得 PyTorch 更適合快速開發和調試。

  • Tensor 是 PyTorch 中最基本的數據結構,類似于 NumPy 數組,但可以在 GPU 上進行加速計算。
  • PyTorch 提供了豐富的 Tensor 操作,如求最大值、求和、改變形狀、求梯度等。
  • Variable 是 Tensor 的高級封裝,它使得 PyTorch 在進行梯度計算時更加靈活。
  • 動態計算圖使得 PyTorch 在調試和開發時非常方便,但相較于 TensorFlow 的靜態圖,可能會稍慢。

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

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

相關文章

深入淺出Spring-Boot-3.x.pdf

通過網盤分享的文件:深入淺出Spring-Boot-3.x.pdf 鏈接: https://pan.baidu.com/s/10ZkhmeIXphEwND9Rv4EBlg?pwduatm 提取碼: uatm

springboot啟動事件CommandLineRunner使用

什么是CommandRunner CommandRunner是springboot啟動完成時會調用的一個runner 啟動參數會傳遞到這個runner 我們能用來做一些初始化工作和緩存預熱等工作 ApplicationRunner VS CommandRunner? 這兩個Runner作用一樣 只是得到的啟動參數格式不一樣 前者是一個Argument對象…

數據可視化TensorboardX和tensorBoard安裝及使用

tensorBoard 和TensorboardX 安裝及使用指南 tensorBoard 和 TensorBoardX 是用于可視化機器學習實驗和模型訓練過程的工具。TensorBoard 是 TensorFlow 官方提供的可視化工具,而 TensorBoardX 是其社區驅動的替代品,支持 PyTorch 等其他框架。以下是它…

藍橋杯C++基礎算法-多重背包

這段代碼實現了一個多重背包問題的動態規劃解法。多重背包問題與完全背包問題類似,但每個物品有其數量限制。以下是代碼的詳細思路解析: 1. 問題背景 給定 n 個物品,每個物品有其體積 v[i]、價值 w[i] 和數量 s[i],以及一個容量為…

【SUNO】【AI作詞】【提示詞】

仿寫歌詞提示詞模板(升級版) 一、仿寫目標 風格定位 音樂風格: [填寫目標風格,如:民謠/流行/古風/電子/爵士等]參考案例:如《成都》的敘事民謠,《孤勇者》的勵志流行。 情感基調: […

26考研——樹與二叉樹_樹與二叉樹的應用(5)

408答疑 文章目錄 三、樹與二叉樹的應用哈夫曼樹和哈夫曼編碼哈夫曼樹的定義概念帶權路徑長度(WPL)計算示例分析 哈夫曼樹的構造算法描述哈夫曼樹的性質示例 哈夫曼編碼Huffman樹的編碼規則Huffman樹的構建過程前綴編碼前綴編碼的分析及應用 Huffman樹的…

【VUE】day06 動態組件 插槽 自定義指令 ESlint

【VUE】day06 動態組件 & 插槽 & 自定義指令 1. 動態組件1.1 通過不同的按鈕展示不同的組件1.1.1回顧click 1.2 keep-alive的使用1.3 keep-alive對應的生命周期函數1.3.1 keep-alive的include屬性1.3.2 exclude 1.4 組件注冊名稱和組件聲明時name的區別1.4.1 組件聲明時…

nodejs-原型污染鏈

還是老規矩,邊寫邊學,先分享兩篇文章 深入理解 JavaScript Prototype 污染攻擊 | 離別歌 《JavaScript百煉成仙》 全書知識點整理-CSDN博客 Ctfshow web入門 nodejs篇 web334-web344_web334 ctfshow-CSDN博客 334-js審計 var express require(expr…

Oracle 數據庫通過exp/imp工具遷移指定數據表

項目需求:從prod數據庫遷移和復制2個表(BANK_STATE,HBS)的數據到uat數據庫環境。 數據庫版本:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 遷移工具:客戶端exp/imp工具 -- 執行命令 從Prod數據庫導出數據exp us…

企業級基于SpringBoot的MQTT的構建和使用

基于SpringBoot的MQTT配置及使用 首先要使用EMQX搭建一個MQTT服務器&#xff0c;參考文檔&#xff1a;EMQX快速開始 本著開源分享的觀點&#xff0c;閑話不多說&#xff0c;直接上代碼 導入Maven <dependency><groupId>org.springframework.integration</gro…

26考研——圖_圖的代碼實操(6)

408答疑 文章目錄 五、圖的代碼實操圖的存儲鄰接矩陣結構定義初始化插入頂點獲取頂點位置在頂點 v1 和 v2 之間插入邊獲取第一個鄰接頂點獲取下一個鄰接頂點顯示圖 鄰接表結構定義初始化圖插入頂點獲取頂點位置在頂點 v1 和 v2 之間插入邊獲取第一個鄰接頂點獲取下一個鄰接頂點…

開源webmail郵箱客戶端rainloop的分支版本SnappyMail 設置發件人允許多重身份

RainLoop已多年未更新&#xff0c;SnappyMail 是 RainLoop 的分支&#xff0c;由社區維護。SnappyMail 不僅修復了漏洞&#xff0c;還增加了更多功能和優化。對 IMAP 支持更好&#xff0c;移動端體驗也比 RainLoop 更細致。 安裝過程和設置跟RainLoop一樣&#xff1a; 以寶塔面…

海量數據場景題--查找兩個大文件的URL

查找兩個大文件共同的URL 給定 a、b 兩個文件&#xff0c;各存放 50 億個 URL&#xff0c;每個 URL 各占 64B&#xff0c;找出 a、b 兩個文件共同的 URL。內存限制是 4G。 操作邏輯&#xff1a; 使用哈希函數 hash(URL) % 1000? 將每個URL映射到0-999的編號 文件A切割為a0, a1…

簡單ELK框架搭建

簡介 ELK 框架是一套開源的日志管理和分析工具&#xff0c;由 Elasticsearch、Logstash 和 Kibana 三個主要組件組成&#xff0c;現在新增了Filebeat組件&#xff0c;可以更高效的收集數據。 Elasticsearch&#xff1a;是一個分布式、高可擴展的開源搜索引擎&#xff0c;能快速…

VS Code 中 .history`文件的來源與 .gitignore`的正確使用

引言 在使用 VS Code 進行 Git 版本控制時&#xff0c;有時會發現項目中多出一個 .history 目錄&#xff0c;并被 Git 識別為未跟蹤文件。本文將解釋 .history 的來源&#xff0c;并提供 .gitignore 的正確配置方法&#xff0c;確保開發環境的整潔性。 1. .history 文件的來源…

網絡之數據鏈路層

數據鏈路層 數據鏈路層目標 TCP/IP提供了一種能力, 將數據可靠的從 B 跨網絡送到 C 主機, 這期間是由無數次局域網轉發構成的, 比如 主機B 到 路由器F 就是一次局域網通信的問題, 而數據鏈路層就是研究數據是如何在局域網內部轉發的. 也就是說, 應用層是進行數據的處理, 傳輸…

A Brief History: from GPT-1 to GPT-3

This is my reading notes of 《Developing Apps with GPT-4 and ChatGPT》. In this section, we will introduce the evolution of the OpenAI GPT medels from GPT-1 to GPT-4. GPT-1 In mid-2018, OpenAI published a paper titled “Improving Language Understanding …

基于大數據的各品牌手機銷量數據可視化分析系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 時代在飛速進步&#xff0c;每個行業都在努力發展現在先進技術&#xff0c;通過這些先進的技術來提高自己的水平和優勢&#xff0c;各品牌手機銷量數據可視化分析系統當然不能排除在外。基于大數據的各品牌手機銷量數據可視化分析系統是在實際應用和軟件工程的開發原理之…

人工智能-群暉Docker部署DB-GPT

人工智能-群暉Docker部署DB-GPT 0 環境及說明1 獲取dbgpt的docker鏡像2 下載向量模型3 下載配置文件4 修改配置文件5 創建dbgpt容器并運行6 訪問dbgpt0 環境及說明 環境項說明DSM版本DSM 7.2.1-69057 update 3Container Manager版本24.0.2-1535當前 hub.docker.com 鏡像倉庫中的…

Netty——TCP 粘包/拆包問題

文章目錄 1. 什么是 粘包/拆包 問題&#xff1f;2. 原因2.1 Nagle 算法2.2 滑動窗口2.3 MSS 限制2.4 粘包的原因2.5 拆包的原因 3. 解決方案3.1 固定長度消息3.2 分隔符標識3.3 長度前綴協議3.3.1 案例一3.3.2 案例二3.3.3 案例三 4. 總結 1. 什么是 粘包/拆包 問題&#xff1f…