pytorch小記(十):pytorch中torch.tril 和 torch.triu 詳解

pytorch小記(十):pytorch中torch.tril 和 torch.triu 詳解

  • PyTorch `torch.tril` 和 `torch.triu` 詳解
    • 1. `torch.tril`(計算下三角矩陣)
      • 📌 作用
      • 🔍 語法
      • 🔹 參數
      • 📌 示例
      • 🔍 `diagonal` 參數
      • 🔍 `torch.tril` 的應用
    • 2. `torch.triu`(計算上三角矩陣)
      • 📌 作用
      • 🔍 語法
      • 🔹 參數
      • 📌 示例
      • 🔍 `diagonal` 參數
    • 3. `torch.tril` vs `torch.triu` 對比
    • 總結


PyTorch torch.triltorch.triu 詳解

在數值計算和深度學習中,下三角矩陣(Lower Triangular Matrix)上三角矩陣(Upper Triangular Matrix) 是非常常見的矩陣操作。PyTorch 提供了 torch.tril()torch.triu() 這兩個函數,分別用于計算下三角矩陣和上三角矩陣。


1. torch.tril(計算下三角矩陣)

📌 作用

torch.tril 返回輸入張量的 下三角部分,即:

  • 保留 主對角線及其以下的元素
  • 主對角線以上的元素全部變為 0

🔍 語法

torch.tril(input, diagonal=0)

🔹 參數

參數說明
input輸入張量
diagonal控制對角線位置(默認 0
diagonal=0保留主對角線 及其以下的元素
diagonal>0向上偏移,保留主對角線以上 diagonal
diagonal<0向下偏移,移除 -diagonal 行的主對角線元素

📌 示例

import torch# 創建一個 4×4 的矩陣
A = torch.tensor([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]
])print("原始矩陣 A:")
print(A)# 計算 A 的下三角矩陣
L = torch.tril(A)
print("\nA 的下三角矩陣(diagonal=0):")
print(L)

輸出:

原始矩陣 A:
tensor([[ 1,  2,  3,  4],[ 5,  6,  7,  8],[ 9, 10, 11, 12],[13, 14, 15, 16]])A 的下三角矩陣(diagonal=0):
tensor([[ 1,  0,  0,  0],[ 5,  6,  0,  0],[ 9, 10, 11,  0],[13, 14, 15, 16]])

💡 說明:主對角線上的元素保留,其上的元素變為 0


🔍 diagonal 參數

print(torch.tril(A, diagonal=1))  # 保留主對角線以上 1 行
print(torch.tril(A, diagonal=-1)) # 移除主對角線

輸出:

A 的下三角矩陣(diagonal=1):
tensor([[ 1,  2,  0,  0],[ 5,  6,  7,  0],[ 9, 10, 11, 12],[13, 14, 15, 16]])A 的下三角矩陣(diagonal=-1):
tensor([[ 0,  0,  0,  0],[ 5,  0,  0,  0],[ 9, 10,  0,  0],[13, 14, 15,  0]])

🔺 diagonal=1向上偏移,保留 1 行主對角線以上的元素。
🔻 diagonal=-1向下偏移,移除主對角線。


🔍 torch.tril 的應用

📌 用于 Masking(掩碼)

seq_length = 5
mask = torch.tril(torch.ones(seq_length, seq_length))  # 創建一個下三角 Mask
print(mask)

輸出:

tensor([[1., 0., 0., 0., 0.],[1., 1., 0., 0., 0.],[1., 1., 1., 0., 0.],[1., 1., 1., 1., 0.],[1., 1., 1., 1., 1.]])

💡 Transformer 中,這種 Mask 用于防止模型在訓練時提前看到未來的信息。


2. torch.triu(計算上三角矩陣)

📌 作用

torch.triu 返回輸入張量的 上三角部分,即:

  • 保留 主對角線及其以上的元素
  • 主對角線以下的元素全部變為 0

🔍 語法

torch.triu(input, diagonal=0)

🔹 參數

參數說明
input輸入張量
diagonal=0保留主對角線及其以上的元素
diagonal>0移除 diagonal 行的主對角線元素
diagonal<0保留主對角線以下 -diagonal

📌 示例

U = torch.triu(A)
print("A 的上三角矩陣(diagonal=0):")
print(U)

輸出:

A 的上三角矩陣(diagonal=0):
tensor([[ 1,  2,  3,  4],[ 0,  6,  7,  8],[ 0,  0, 11, 12],[ 0,  0,  0, 16]])

💡 說明:主對角線上的元素及其上的元素保留,下面的元素變為 0


🔍 diagonal 參數

print(torch.triu(A, diagonal=1))  # 移除主對角線元素
print(torch.triu(A, diagonal=-1)) # 保留主對角線以下 1 行

輸出:

A 的上三角矩陣(diagonal=1):
tensor([[ 0,  2,  3,  4],[ 0,  0,  7,  8],[ 0,  0,  0, 12],[ 0,  0,  0,  0]])A 的上三角矩陣(diagonal=-1):
tensor([[ 1,  2,  3,  4],[ 5,  6,  7,  8],[ 0, 10, 11, 12],[ 0,  0, 15, 16]])

🔺 diagonal=1:移除主對角線的元素,僅保留主對角線以上的元素。
🔻 diagonal=-1:允許保留主對角線以下 1 行的元素。


3. torch.tril vs torch.triu 對比

作用torch.tril(A)torch.triu(A)
計算結果取下三角部分取上三角部分
對角線控制diagonal=0 保留主對角線diagonal=0 保留主對角線
diagonal>0保留主對角線以上元素移除主對角線部分元素
diagonal<0移除主對角線部分元素保留主對角線以下部分

總結

  • torch.tril()下三角矩陣,可以用于 Cholesky 分解Transformer Masking
  • torch.triu()上三角矩陣,常用于 線性代數計算矩陣變換

🚀 你可以根據不同的需求選擇合適的函數,在 PyTorch 中高效處理矩陣運算!

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

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

相關文章

Java基礎與集合

參考 Java基礎知識詳解&#xff1a;從面向對象到異常處理-CSDN博客 2024年 Java 面試八股文&#xff08;20w字&#xff09;_java面試八股文-CSDN博客 基礎知識 java概述 什么是java&#xff1f; java是一種面向對象的編程語言 java特點 面向對象&#xff08;繼承&#…

【R語言】二項分布,正態分布,極大似然估計實現

二項分布 生成二項分布概率 s <- 0:60 prob <- dbinom(s, size 60, prob 1/6)s <- 0:60&#xff1a;生成 0 到 60 之間的整數&#xff0c;表示可能的成功次數。 dbinom(s, size 60, prob 1/6)dbinom(x, size, prob) 計算二項分布的概率質量函數&#xff08;PMF…

【C語言】:學生管理系統(多文件版)

一、文件框架 二、Data data.txt 三、Inc 1. list.h 學生結構體 #ifndef __LIST_H__ #define __LIST_H__#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <time.h>#define MAX_LEN 20// 學生信息…

OpenResty/Lua 編碼指南/指南

很多開發語言都有自己的編碼規范&#xff0c;來告訴開發者這個領域內一些約定俗成的東西&#xff0c;讓大家寫的代碼風格保持一致&#xff0c;并且避免一些常見的陷阱。這對于新手來說是非常友好的&#xff0c;可以讓初學者快速準確地上手。比如 Python 的 PEP 80&#xff0c;就…

數據結構 -- 二叉樹的存儲結構

二叉樹的存儲結構 順序存儲 #define MaxSize 100 struct TreeNode{ElemType value; //結點中的數據元素bool isEmpty; //結點元素是否為空 };//定義一個長度為MaxSize的數組t&#xff0c;按照從上至下、從左至右的順序依次完成存儲完全二叉樹中的各個節點 TreeNode t[MaxSi…

Linux系統移植篇(十一)Linux 內核啟動流程

要分析 Linux 啟動流程&#xff0c;同樣需要先編譯一下 Linux 源碼&#xff0c;因為有很多文件是需要編譯才 會生成的。首先分析 Linux 內核的連接腳本文件 arch/arm/kernel/vmlinux.lds&#xff0c;通過鏈接腳本可以 找到 Linux 內核的第一行程序是從哪里執行的。vmlinux.lds …

【Docker入門】構建推送第一個Docker映像

【Docker入門】構建推送第一個Docker映像 Build and Push the First Docker Image By JacksonML Docker的容器(Container)映像是輕量級的可執行獨立包&#xff0c;包含代碼、運行時、庫、環境變量以及配置文件&#xff0c;它對于運行軟件至關重要。注冊表可在團隊間分享映像。…

【eNSP實戰】(續)一個AC多個VAP的實現—將隧道轉發改成直接轉發

在 一個AC多個VAP的實現—CAPWAP隧道轉發 此篇文章配置的基礎上&#xff0c;將隧道轉發改成直接轉發 一、改成直接轉發需要改動的配置 &#xff08;一&#xff09;將連接AP的接口改成trunk口&#xff0c;并允許vlan100、101、102通過 [AC1]interface GigabitEthernet 0/0/8 …

SPI 總線協議

1、協議介紹 SPI&#xff0c;是英語 Serial Peripheral interface 的縮寫&#xff0c;顧名思義就是串行外圍設備接口。是 Motorola 首先在其 MC68HCXX 系列處理器上定義的。 SPI&#xff0c;是一種高速的&#xff0c;全雙工&#xff0c;同步的通信總線。主節點或子節點的數據在…

我愛學算法之——滑動窗口攻克子數組和子串難題(上)

現在來學習"滑動窗口"這一算法思想。 至于什么是"滑動窗口"呢&#xff1f;簡單來說就是同向雙指針&#xff1b;現在來通過題目來了解什么是"滑動窗口" 一、長度最小的子數組 題目鏈接&#xff1a;長度最小的子數組 題目解析 先來看題目&#…

ora-600 ktugct: corruption detected---惜分飛

接手一個oracle 21c的庫恢復請求,通過Oracle數據庫異常恢復檢查腳本(Oracle Database Recovery Check)腳本檢測之后,發現undo文件offline之后,做了resetlogs操作,導致該文件目前處于WRONG RESETLOGS狀態 嘗試恢復數據庫ORA-16433錯誤 SQL> recover datafile 1; ORA-00283:…

20. Excel 自動化:Excel 對象模型

一 Excel 對象模型是什么 Excel對象模型是Excel圖形用戶界面的層次結構表示&#xff0c;它允許開發者通過編程來操作Excel的各種組件&#xff0c;如工作簿、工作表、單元格等。 xlwings 是一個Python庫&#xff0c;它允許Python腳本與Excel進行交互。與一些其他Python庫&#x…

IIS 服務器日志和性能監控

Internet Information Services &#xff08;IIS&#xff09; 是 Microsoft 提供的一款功能強大、靈活且可擴展的 Web 服務器&#xff0c;用于托管網站、服務和應用程序。IIS 支持 HTTP、HTTPS、FTP、SMTP 和更多用于提供網頁的協議&#xff0c;因此廣泛用于企業環境。 IIS 的…

jenkins pipline 自動化測試

以下是一個典型的 Jenkins Pipeline 示例&#xff0c;用于執行自動化測試流程&#xff08;支持單元測試、集成測試、代碼質量掃描&#xff09;&#xff0c;包含多階段執行和測試結果處理&#xff1a; pipeline {agent anyenvironment {// 定義環境變量PROJECT_NAME "my-…

APP測試

一、APP測試范圍 功能測試性能測試&#xff1a;CPU、內存占用、啟動速度、流量、電量消耗、流暢度、穩定性專項測試&#xff1a;安裝卸載升級、push消息推送 、交叉事件測試 、用戶體驗測試 、兼容性測試 二、APP包發布方式及策略 分類&#xff1a; 內部發布渠道。如&#x…

12 File文件對象:創建、獲取基本信息、遍歷文件夾、查找文件;字符集的編解碼 (黑馬Java視頻筆記)

文章目錄 File >> 存儲數據的方案1. 認識File2. File操作2.1 創建File對象2.2 File操作1&#xff09;對文件對象的信息的操作2&#xff09;文件/文件夾的創建/刪除3&#xff09;??對文件夾的遍歷 3. 方法遞歸3.1 認識遞歸3.2 遞歸算法及其執行流程1) 案例&#xff1a;2…

oracle 基礎知識之 多表查詢

多表查詢定義&#xff1a;當查詢的數據并不是來源一個表時&#xff0c;需要使用多表連接操作完成查詢。多表連接查詢通過表之間的關聯字段&#xff0c;一次查詢出多個表的數據。多表查詢包括了等值連接、左連接、右連接、完全連接。 1.等值連接 等值連接也稱為簡單連接&#xf…

服務器防火墻根據什么特征來過濾數據包?

防火墻是服務器安全防護的第一道屏障&#xff0c;它的主要作用是監控、過濾和控制進出服務器的數據流量&#xff0c;防止惡意攻擊、非法訪問和數據泄露。防火墻通過分析數據包的特定特征來決定是否允許、拒絕或限制數據的傳輸。 服務器防火墻的基本工作原理&#xff1a; 防火墻…

Prims region.Views 為null

原因&#xff1a; 導航未完成或異步問題 解決方式&#xff1a;使用回調確認導航完成后再操作視圖 _regionManager.RequestNavigate("MonitorRegion", "MonitorView", nps, navigationResult > {if (navigationResult.Result true){var region _regio…

reconstruct_3d_object_model_for_matching例子

文章目錄 1.獲取om3文件2.準備可視化3.準備3D可視化4.讀取3D模型5.顯示成對注冊結果16.顯示成對注冊結果27.聯合注冊模型8.處理圖像8.1子采樣8.2 圖像計算與平滑8.3 三角測量 9.基于表面做3D匹配10.評估模型準確度10.1 在場景中找到模型10.2 計算模型和場景之間的距離 11.立體系…