PyTorch使用(7)-張量常見運算函數

1. 基本數學運算

1.1 平方根和冪運算

import torchx = torch.tensor([4.0, 9.0, 16.0])# 平方根
sqrt_x = torch.sqrt(x)  # tensor([2., 3., 4.])# 平方
square_x = torch.square(x)  # tensor([16., 81., 256.])# 任意冪次
pow_x = torch.pow(x, 3)  # tensor([64., 729., 4096.])# 運算符形式
sqrt_x_alt = x ** 0.5
square_x_alt = x ** 2

1.2 指數和對數

# 自然指數
exp_x = torch.exp(x)  # tensor([5.4595e+01, 8.1031e+03, 8.8861e+06])# 自然對數
log_x = torch.log(x)  # tensor([1.3863, 2.1972, 2.7726])# 以10為底的對數
log10_x = torch.log10(x)  # tensor([0.6021, 0.9542, 1.2041])# 帶clip的最小值保護(避免log(0))
safe_log = torch.log(x + 1e-8)

2. 統計運算

2.1 求和與均值

x = torch.randn(3, 4)  # 3x4隨機張量# 全局求和
total = torch.sum(x)  # 標量# 沿特定維度求和
sum_dim0 = torch.sum(x, dim=0)  # 形狀(4,),沿行求和
sum_dim1 = torch.sum(x, dim=1)  # 形狀(3,),沿列求和# 均值計算
mean_val = torch.mean(x)  # 全局均值
mean_dim0 = torch.mean(x, dim=0)  # 沿行求均值

2.2 極值與排序

# 最大值/最小值
max_val = torch.max(x)  # 全局最大值
min_val = torch.min(x)  # 全局最小值# 沿維度的極值及索引
max_vals, max_indices = torch.max(x, dim=1)  # 每行最大值及位置
min_vals, min_indices = torch.min(x, dim=0)  # 每列最小值及位置# 排序
sorted_vals, sorted_indices = torch.sort(x, dim=1, descending=True)

2.3 方差與標準差

# 無偏方差(分母n-1)
var_x = torch.var(x, unbiased=True)  # 全局方差
var_dim0 = torch.var(x, dim=0)  # 沿行方差# 標準差
std_x = torch.std(x)  # 全局標準差
std_dim1 = torch.std(x, dim=1)  # 沿列標準差

3. 矩陣運算

3.1 基本矩陣運算

A = torch.randn(3, 4)
B = torch.randn(4, 5)# 矩陣乘法
matmul = torch.matmul(A, B)  # 形狀(3,5)
matmul_alt = A @ B  # 等價寫法# 點積(向量)
v1 = torch.randn(3)
v2 = torch.randn(3)
dot_product = torch.dot(v1, v2)# 批量矩陣乘法
batch_A = torch.randn(5, 3, 4)  # 5個3x4矩陣
batch_B = torch.randn(5, 4, 5)  # 5個4x5矩陣
batch_matmul = torch.bmm(batch_A, batch_B)  # 形狀(5,3,5)

3.2 矩陣分解

# 特征分解(對稱矩陣)
sym_matrix = torch.randn(3, 3)
sym_matrix = sym_matrix @ sym_matrix.T  # 構造對稱矩陣
eigenvals, eigenvecs = torch.linalg.eigh(sym_matrix)# SVD分解
U, S, V = torch.linalg.svd(A)

4. 比較運算

4.1 元素級比較

a = torch.tensor([1, 2, 3])
b = torch.tensor([3, 2, 1])# 比較運算
eq = torch.eq(a, b)  # tensor([False, True, False])
gt = torch.gt(a, b)  # tensor([False, False, True])
lt = torch.lt(a, b)  # tensor([True, False, False])# 運算符形式
eq_alt = a == b
gt_alt = a > b

4.2 約簡比較

# 判斷所有元素為True
all_true = torch.all(eq)# 判斷任一元素為True
any_true = torch.any(gt)# 判斷張量相等(形狀和值)
torch.equal(a, b)  # False

5. 規約運算

5.1 常用規約

x = torch.randn(2, 3)# 求和規約
sum_all = x.sum()  # 全局求和
sum_dim = x.sum(dim=1)  # 沿維度規約# 累積和
cumsum = x.cumsum(dim=0)  # 沿維度累積# 乘積規約
prod_all = x.prod()  # 全局乘積

5.2 高級規約

# 加權平均
weights = torch.softmax(torch.randn(3), dim=0)
weighted_mean = torch.sum(x * weights, dim=1)# 沿維度的logsumexp(數值穩定)
logsumexp = torch.logsumexp(x, dim=1)

6. 工程實踐建議

6.1. 廣播機制理解:確保運算張量的形狀兼容

# 廣播示例
a = torch.randn(3, 1)
b = torch.randn(1, 3)
c = a + b  # 形狀(3,3)

6.2. 原地操作:使用_后綴節省內存

x.sqrt_()  # 原地平方根
x.add_(1)  # 原地加1

6.3. 設備一致性:確保運算張量在同一設備

if torch.cuda.is_available():x = x.cuda()y = y.cuda()z = x + y

6.4. 梯度保留:注意運算對計算圖的影響

x = torch.tensor(2.0, requires_grad=True)
y = x ** 2
y.backward()  # dy/dx = 2x = 4.0

6.5. 數值穩定性:使用穩定實現

# 不穩定的softmax實現
unstable = torch.exp(x) / torch.exp(x).sum(dim=1, keepdim=True)# 穩定的softmax實現
stable = torch.softmax(x, dim=1)

7. 性能優化技巧

7.1 向量化操作:避免Python循環

# 不好的做法
result = torch.zeros_like(x)
for i in range(x.size(0)):result[i] = x[i] * 2# 好的做法
result = x * 2

7.2. 融合操作:減少中間結果

# 低效
temp = x + y
result = temp * z# 高效
result = (x + y) * z

7.3. 使用內置函數:利用優化實現

# 自定義實現
custom_norm = torch.sqrt(torch.sum(x ** 2))# 內置優化函數
optimized_norm = torch.norm(x)

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

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

相關文章

Nginx功能及應用全解:從負載均衡到反向代理的全面剖析

Nginx作為一款開源的高性能HTTP服務器和反向代理服務器,憑借其高效的資源利用率和靈活的配置方式,已成為互聯網領域中最受歡迎的Web服務器之一。無論是作為HTTP服務器、負載均衡器,還是作為反向代理和緩存服務器,Nginx的多種功能廣…

安徽京準:NTP時間同步服務器操作使用說明

安徽京準:NTP時間同步服務器操作使用說明 3.1 連接天線 天線連接到“ANT”口。 3.2 連接電源 將220V電源線連到AC220V座上或將電源適配器(7.5V~12V)接到DC口上。也可以同時接上,提高供電可靠性。 3.3 LAN網口 網線連接到NTP…

Java項目之基于ssm的懷舊唱片售賣系統(源碼+文檔)

項目簡介 懷舊唱片售賣系統實現了以下功能: 用戶信息管理: 用戶信息新增:添加新用戶的信息。 用戶信息修改:對現有用戶信息進行修改。 商品信息管理: 商品信息添加:增加新的商品(唱片&#x…

基于 Python 的自然語言處理系列(70):檢索增強生成(RAG)

1. 什么是 RAG? 在許多大模型(LLM)應用場景中,我們需要使用特定的用戶數據,而這些數據并未包含在模型的訓練集中。檢索增強生成(Retrieval Augmented Generation,RAG)是一種有效的解…

CAD插件實現:所有文字顯示到列表、縮放、編輯——CAD-c#二次開發

當圖中有大量文字,需要全部顯示到一個列表時并縮放到需要的文字時,可采用插件實現,效果如下: 附部分代碼如下: private void BtnSelectText_Click(object sender, EventArgs e){var doc Application.DocumentManager.…

Systemd構建自動化備份服務與外部存儲管理

實訓背景 你是一家數據公司的系統管理員,需設計一套自動化備份系統,滿足以下需求: 定期備份:每周日凌晨1點將 /data 目錄壓縮備份到 /backups。外部存儲掛載:插入USB設備時自動掛載到 /mnt/usb,并觸發增量…

PostgreSQL中根據另一表的值來更新一個字段

UPDATE table1 SET value t2.new_value FROM table2 t2 WHERE table1.id t2.reference_id; 解釋 UPDATE table1:指定要更新的表,不要用別名。 SET value t2.new_value:設置要更新的字段及其新值,這里新值來自 table2。也可更…

#SVA語法滴水穿石# (000)斷言基本概念和背景

一、前言 隨著數字電路規模越來越大、設計越來越復雜,使得對設計的功能驗證越來越重要。首先,我們要明白為什么要對設計進行驗證?驗證有什么作用?例如,在用FPGA進行設計時,我們并不能確保設計出來的東西沒有功能上的漏洞,因此在設計后我們都會對其進行驗證仿真。換句話說…

Git 從入門到精通(開源協作特別版)

🧠 Git 從入門到精通(開源協作特別版) ? 基礎命令 🧰 高級用法 🛠? 開源實戰技巧 🌍 GitHub 社區協作 適合:從0開始 → 熟練開發者 → 參與/維護開源項目 🔰 第1章:…

【SQL】取消sql某一列的唯一值key值的方法

在插入數據到sql時,遇到了這個問題: Duplicate entry ‘XXX’ for key 起因是: 我之前設計表的時候,手動給product_title 這個列加了一個key, key 是這個字段的唯一鍵約束,就不能重復在這一列存入重復的數…

【小沐學Web3D】three.js 加載三維模型(React Three Fiber)

文章目錄 1、簡介1.1 Three.js1.2 React Three Fiber 2、測試2.1 初始化環境2.2 app.js修改(顯示內置立方體)2.3 app.js修改(顯示內置球體)2.4 app.js修改(顯示自定義立方體)2.5 app.js修改(顯示…

本地部署 Firecrawl 爬蟲讓 AI 知識庫更豐滿

https://www.firecrawl.dev/ firecrawl-logo-with-fire.png 什么是Firecrawl Firecrawl 是一款 可以將網站轉換為 便于AI處理的Markdown 格式的爬蟲工具 ,主要 提供 API 服務 ,無需站點地圖,只需要接收一個 URL 地址就可以爬取網站及網站下可…

純個人整理,藍橋杯使用的算法模板day2(0-1背包問題),手打個人理解注釋,超全面,且均已驗證成功(附帶詳細手寫“模擬流程圖”,全網首個

算法索引 01背包優化前空間優化版(使用一維數組)優化后的模擬流程圖為何優化后,j不能使用正序遍歷模擬流程圖 代碼對應實現案例 01背包 優化前 /*** 0-1背包問題解法(與下方代碼表格示例對應,已模擬驗證)*…

APang網聯科技項目報告【服務器篇】

APang網聯科技:連接未來,智能領航 公司簡介 APang網聯科技成立于 [2005年],總部位于 [廣東深圳],是一家集網絡技術研發、系統集成、項目實施與運維服務為一體的高新技術企業。我們致力于為客戶提供全方位、定制化的網絡部署解決…

Scade One - 將MBD技術從少數高安全領域向更廣泛的安全嵌入式軟件普及

Scade One是繼Scade Suite version 6自2008年起發展近20年后的首次主要改進版本。在Scade One發布的同時,Scade團隊發布了一系列介紹Scade One的博客。本篇Scade One - Democratizing model-based development是其中的一部分。在后面的內容中,將復述博客…

Word在生成PDF后,PDF左側導航書簽目錄錯誤顯示的解決方法

1、打開要轉換的word文件,點擊“開始”,“另存為” 2、保存在本地時,在“保存類型”的下拉列表中選擇“PDF(*.pdf)” 3、選擇完保存類型后,點擊“選項”按鈕 4、在彈出的“選項”框中,選擇“創建…

Windows系統服務器安裝Office Online Server

服務器配置 配置參數OSThe 64-bit edition of Windows Server 2016CPU4RAM8GNetwork開啟Hard disk80GPort80, 443, 809 執行命令 PowerShell中添加Windows服務: Add-WindowsFeature Web-Server,Web-Mgmt-Tools,Web-Mgmt-Console,Web-WebServer,Web-Common-Http,…

【小沐學Web3D】three.js 加載三維模型(Angular)

文章目錄 1、簡介1.1 three.js1.2 angular.js 2、three.js Angular.js結語 1、簡介 1.1 three.js Three.js 是一款 webGL(3D繪圖標準)引擎,可以運行于所有支持 webGL 的瀏覽器。Three.js 封裝了 webGL 底層的 API ,為我們提供了…

簡單程序語言理論與編譯技術·22 實現一個從AST到RISCV的編譯器

本文是記錄專業課“程序語言理論與編譯技術”的部分筆記。 LECTURE 22(實現一個從AST到RISCV的編譯器) 一、問題分析 1、完整的編譯器(如LLVM)需先完成AST到IR的轉換,并進行代碼優化,再到匯編&#xff0…

JavaWeb 課堂筆記 —— 02 JavaScript

本系列為筆者學習JavaWeb的課堂筆記,視頻資源為B站黑馬程序員出品的《黑馬程序員JavaWeb開發教程,實現javaweb企業開發全流程(涵蓋SpringMyBatisSpringMVCSpringBoot等)》,章節分布參考視頻教程,為同樣學習…