基于PyTorch的深度學習2——逐元素操作,歸并,比較,矩陣

以下為部分逐元素操作代碼實例。

import torcht = torch.randn(1, 3)
t1 = torch.randn(3, 1)
t2 = torch.randn(1, 3)#t+0.1*(t1/t2)
torch.addcdiv(t, 0.1, t1, t2)#計算sigmoid
torch.sigmoid(t)#將t限制在[0,1]之間
torch.clamp(t,0,1)#t+2進行就地運算
t.add_(2)

歸并操作一般涉及一個dim參數,指定沿哪個維進行歸并。另一個參數是keepdim,說明輸出結果中是否保留維度1,缺省情況是False,即不保留。以下為歸并操作的部分代碼

import torch#生成一個含6個數的向量
a=torch.linspace(0,10,6)#使用view方法,把a變為2x3矩陣
a=a.view((2,3))#沿y軸方向累加,即dim=0
b=a.sum(dim=0)   #b的形狀為[3]#沿y軸方向累加,即dim=0,并保留含1的維度
b=a.sum(dim=0,keepdim=True) #b的形狀為[1,3]

機器學習和深度學習中存在大量的矩陣運算,常用的算法有兩種:一種是逐元素乘法,另外一種是點積乘法

1)Torch的dot與Numpy的dot有點不同,Torch中的dot是對兩個為1D張量進行點積運算,Numpy中的dot無此限制。

2)mm是對2D的矩陣進行點積,bmm對含batch的3D進行點積運算。

3)轉置運算會導致存儲空間不連續,需要調用contiguous方法轉為連續。

torch.dottorch.mmtorch.bmm

1. 使用?torch.dot

torch.dot 計算兩個一維張量(向量)的點積。

import torcha = torch.tensor([2, 3])
b = torch.tensor([3, 4])result_dot = torch.dot(a, b)  # 運行結果為 2*3 + 3*4 = 6 + 12 = 18
print("Dot product result:", result_dot)

解釋: 點積是對應元素相乘后的和,即 2×3+3×4=6+12=182×3+3×4=6+12=18。

2. 使用?torch.mm

torch.mm 執行兩個二維張量(矩陣)之間的矩陣乘法。

x = torch.randint(10, (2, 3))  # 創建一個形狀為 (2, 3) 的隨機整數張量
y = torch.randint(6, (3, 4))   # 創建一個形狀為 (3, 4) 的隨機整數張量result_mm = torch.mm(x, y)  # 形狀為 (2, 4) 的結果張量
print("Matrix multiplication result:\n", result_mm)

解釋: torch.mm 對兩個二維張量執行標準的矩陣乘法。給定 XX 是 2×32×3 的矩陣,YY 是 3×43×4 的矩陣,則結果是一個 2×42×4 的矩陣。

示例輸出

x = tensor([[7, 8, 9],[5, 6, 7]])
y = tensor([[4, 3, 2, 1],[0, 1, 2, 3],[4, 3, 2, 1]])
tensor([[64, 54, 44, 34],[48, 40, 32, 24]])

3. 使用?torch.bmm

torch.bmm 執行批量矩陣乘法,適用于三維張量,其中每個二維子張量(切片)都進行矩陣乘法。

x = torch.randint(10, (2, 2, 3))  # 創建一個形狀為 (2, 2, 3) 的隨機整數張量
y = torch.randint(6, (2, 3, 4))   # 創建一個形狀為 (2, 3, 4) 的隨機整數張量result_bmm = torch.bmm(x, y)  # 形狀為 (2, 2, 4) 的結果張量
print("Batch matrix multiplication result:\n", result_bmm)

解釋: torch.bmm 針對三維張量中的每一對二維子張量執行矩陣乘法。對于形狀為 (batch_size, m, n)(batch_size, n, p) 的輸入張量,輸出將是形狀為 (batch_size, m, p) 的張量。

示例輸出

假設 xy 分別是:

x = tensor([[[7, 8, 9],[5, 6, 7]],[[1, 2, 3],[4, 5, 6]]])y = tensor([[[4, 3, 2, 1],[0, 1, 2, 3],[4, 3, 2, 1]],[[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]]])

result_bmm 可能是:

tensor([[[64, 54, 44, 34],[48, 40, 32, 24]],[[38, 44, 50, 56],[86, 98, 110, 122]]])

總結

  • torch.dot:用于計算兩個一維張量的點積。
  • torch.mm:用于計算兩個二維張量的標準矩陣乘法。
  • torch.bmm:用于計算兩個三維張量中對應的二維子張量之間的批量矩陣乘法。

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

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

相關文章

線程池的工作流程

線程池的工作流程主要包括任務提交、線程分配、任務執行和線程回收等環節,以下是對其詳細的描述: 任務提交 當有任務需要執行時,用戶通過線程池提供的提交方法,如execute()或submit()方法,將任務(通常是實現…

C++20 標準化有符號整數:邁向更可預測的整數運算

文章目錄 一、背景:為什么需要標準化?二、2 的補碼:原理與優勢(一)2 的補碼原理(二)2 的補碼的優勢 三、C20 的變化:明確 2 的補碼四、如何利用這一特性優化代碼(一&…

Libgdx游戲開發系列教程(1)——環境配置及demo運行

目錄 環境 JDK環境 項目創建 1.下載gdx-setup.jar文件 2.填寫信息,創建項目 demo運行步驟 1.修改gradle.properties 2.安裝Build-Tool 3.運行 Libgdx游戲是基于Java的一款游戲引擎,可以發布Android,桌面端,Html,IOS等游戲,出名的《殺戮尖塔》也是用了此引擎制作的 本…

【jenkins配置記錄】

全局工具配置: D:\Program Files\Java\jdk1.8.0_281 D:\Program Files\Git\bin\git.exe E:\allure-2.13.2 2. GIT 3. 定時任務 H 8 * * 1-5 4. 構建觸發器 5. 構建后操作 Allure Report 吐血記錄:報告路徑可以為 workspace 相對路徑 6. 系統配置 em…

C++:內聯函數

內聯函數可以用來降低運行時間,當內聯函數收到編譯器的指示時,即可發生內聯:編譯器會使用函數的定義體來替代函數調用語句,此行為發生在編譯階段。 定義內聯函數涉及的關鍵字為inline,例如: inline void …

Linux網絡相關概念和重要知識(1)(網絡協議、網絡通信)

目錄 1.網絡協議 (1)網絡的起源 (2)為什么需要協議 (3)協議分層及其設計的解耦 (4)OSI定義的七層網絡模型 ①分層及其功能 ②TCP/IP協議 ③傳輸層協議(TCP和UDP&a…

【入門Web安全之前端學習的側重點和針對性的建議】

入門Web安全之前端學習的側重點和針對性的建議 一、HTML:理解攻擊載荷的載體二、CSS:次要但需警惕點擊劫持三、JavaScript:滲透測試的核心重點四、瀏覽器工具:滲透測試的實戰武器五、學習建議與資源六、總結:滲透測試者…

QILSTE H6-C210TCG高亮翠綠光LED燈珠 發光二極管LED

# H6-C210TCG:高亮翠綠光LED的復雜特性解析 在現代電子設備的復雜設計中,H6-C210TCG型號的高亮翠綠光LED以其獨特的光學和電氣特性脫穎而出。這款LED不僅具備緊湊的尺寸,還融合了復雜的參數設計,使其在眾多應用場景中表現出色。然…

Linux操作系統5-進程信號2(信號的4種產生方式,signal系統調用)

上篇文章:Linux操作系統5-進程信號1(信號基礎)-CSDN博客 本篇Gitee倉庫:myLerningCode/l25 橘子真甜/Linux操作系統與網絡編程學習 - 碼云 - 開源中國 (gitee.com) 本篇重點:信號的4種產生 目錄 一. signal系統調用 …

如何在docker中的mysql容器內執行命令與執行SQL文件

通過 docker ps -a 查詢當前運行的容器,找到想執行命令的容器名稱。 docker ps -a若想執行sql文件,則將sql文件放入當前文件夾下后將項目內的 SQL 文件拷貝到 mysql 容器內部的 root下。 sudo docker cp /root/enterprise.sql mysql:/root/然后進入 my…

STM32 RTC實時時鐘詳解與HAL庫實戰教程

摘要:本文深入講解STM32的RTC(Real-Time Clock)模塊,涵蓋原理分析、CubeMX配置、HAL庫編程實現,并提供完整的鬧鐘設置與時間校準例程代碼。通過本文,您將掌握RTC在低功耗場景下的核心應用技巧。 1. RTC模塊…

Spring Boot攔截器(Interceptor)與過濾器(Filter)詳細教程

Spring Boot攔截器(Interceptor)與過濾器(Filter)詳細教程 目錄 概述 什么是攔截器(Interceptor)?什么是過濾器(Filter)?兩者的核心區別 使用場景 攔截器的典…

Tauri跨平臺開發問題及解決方案深度解析(React版)

Tauri跨平臺開發問題及解決方案深度解析(React版) 一、環境配置與項目初始化難題(React適配) 1.1 React項目初始化 推薦模板: # 使用ReactTypeScript模板 npm create tauri-applatest -- --template react-ts# 項目…

AIGC和搜索引擎的異同

AIGC(生成式人工智能)與搜索引擎的核心差異體現在信息處理方式和輸出形態上,我們可以從以下維度對比: 一、工作原理的本質差異 信息檢索機制 搜索引擎:基于關鍵詞匹配(如"中暑怎么辦"→返回相關…

SFT與RLHF的關系

在大模型訓練中,SFT(監督微調)和RLHF(基于人類反饋的強化學習)是相互關聯但目標不同的兩個階段,通常需要結合使用以優化模型性能,而非互相替代。以下是關鍵要點: 1. 核心關系 SFT&…

C# 類型轉換

C# 類型轉換 引言 在C#編程語言中,類型轉換是一種將一個數據類型的變量轉換成另一個數據類型的操作。類型轉換是編程中常見的操作,特別是在處理不同數據類型的變量時。本文將詳細探討C#中的類型轉換,包括隱式轉換和顯式轉換,以及…

提升系統效能:從流量控制到并發處理的全面解析

在當今快速發展的數字時代,無論是構建高效的網絡服務、管理海量數據,還是優化系統的并發處理能力,都是技術開發者和架構師們面臨的重大挑戰。本文集旨在深入探討幾個關鍵技術領域,包括用于網絡通信中的漏桶算法與令牌桶算法的原理…

Git GitHub基礎

git是什么? Git是一個分布式版本控制系統,用于管理源代碼的變更。它允許多個開發者在同一個項目上協作,同時跟蹤每個修改的歷史記錄。 關鍵詞: 分布式版本控制軟件 軟件 安裝到我們電腦上的一個工具 版本控制 例如論文&…

派可數據BI接入DeepSeek,開啟智能數據分析新紀元

派可數據BI產品完成接入DeepSeek,此次接入標志著派可數據BI在智能數據分析領域邁出了重要一步,將為用戶帶來更智能、更高效、更便捷的數據分析體驗。 派可數據BI作為國內領先的商業智能解決方案提供商,一直致力于為用戶提供高效、穩定易擴展…

Linux-ftrace-雙nop機制的實現

Linux 內核調試工具ftrace 之(NOP動態插樁的實現原理) ftrace 是 Linux 內核中的一種跟蹤工具,主要用于性能分析、調試和內核代碼的執行跟蹤。它通過在內核代碼的關鍵點插入探針(probe)來記錄函數調用和執行信息。這對…