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.mzph.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.立体系…