Python | Pytorch | Tensor知识点总结

如是我闻: Tensor 是我们接触Pytorch了解到的第一个概念,这里是一个关于 PyTorch Tensor 主题的知识点总结,涵盖了 Tensor 的基本概念、创建方式、运算操作、梯度计算和 GPU 加速等内容。


1. Tensor 基本概念

  • Tensor 是 PyTorch 的核心数据结构,类似于 NumPy 的 ndarray,但支持 GPU 加速和自动求导。
  • PyTorch 的 Tensor 具有 动态计算图,可用于深度学习模型的前向传播和反向传播。

PyTorch Tensor vs. NumPy Array

特性PyTorch TensorNumPy Array
支持 GPU
自动求导✅ (requires_grad=True)
兼容性✅ (可转换为 NumPy)✅ (可转换为 Tensor)

2. Tensor 创建方式

2.1 直接创建 Tensor

import torch# 从列表创建
a = torch.tensor([1, 2, 3])
b = torch.tensor([[1.0, 2.0], [3.0, 4.0]], dtype=torch.float32)print(a, a.dtype)  # 默认 int64
print(b, b.dtype)  # float32

2.2 常见初始化方法

# 全零/全一 Tensor
x = torch.zeros((3, 3))
y = torch.ones((2, 2))# 随机初始化
z = torch.rand((3, 3))  # [0, 1) 均匀分布
n = torch.randn((2, 2)) # 标准正态分布# 单位矩阵
I = torch.eye(3)# 创建指定范围的 Tensor
r = torch.arange(0, 10, 2)  # [0, 2, 4, 6, 8]
l = torch.linspace(0, 1, 5) # [0.0, 0.25, 0.5, 0.75, 1.0]

2.3 通过 NumPy 互转

import numpy as np# NumPy -> PyTorch
np_array = np.array([[1, 2], [3, 4]])
tensor_from_np = torch.from_numpy(np_array)# PyTorch -> NumPy
tensor = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
np_from_tensor = tensor.numpy()

3. Tensor 形状操作

3.1 维度变换

x = torch.randn(2, 3, 4)# 改变形状
y = x.view(6, 4)   # 使用 view 改变形状 (必须保证数据连续存储)
z = x.reshape(6, 4)  # reshape 不受数据存储方式限制# 维度扩展
x_exp = x.unsqueeze(0)  # 在第 0 维添加一个维度
x_squeeze = x_exp.squeeze(0)  # 去除维数为 1 的维度

3.2 维度交换

x = torch.rand(2, 3, 4)x_t = x.permute(2, 0, 1)  # 交换维度
x_t2 = x.transpose(1, 2)  # 交换 1 和 2 维

4. Tensor 运算

4.1 逐元素运算

x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])# 逐元素运算
add = x + y  # 或 torch.add(x, y)
sub = x - y  # 或 torch.sub(x, y)
mul = x * y  # 或 torch.mul(x, y)
div = x / y  # 或 torch.div(x, y)# 指数、对数、幂运算
exp = torch.exp(x)
log = torch.log(y)
pow_2 = x.pow(2)  # 平方

4.2 线性代数运算

A = torch.tensor([[1, 2], [3, 4]])
B = torch.tensor([[5, 6], [7, 8]])# 矩阵乘法
C = torch.mm(A, B)  # 矩阵乘法
D = A @ B  # 矩阵乘法 (等价于 mm)# 逆矩阵
A_inv = torch.inverse(A.float())# 计算特征值和特征向量
eigenvalues, eigenvectors = torch.eig(A.float(), eigenvectors=True)

4.3 统计运算

x = torch.randn(3, 3)mean_x = x.mean()    # 均值
std_x = x.std()      # 标准差
sum_x = x.sum()      # 总和
max_x = x.max()      # 最大值
argmax_x = x.argmax() # 最大值索引

5. Tensor 计算图和自动求导

5.1 计算梯度

x = torch.tensor(2.0, requires_grad=True)y = x**2 + 3*x + 1  # 计算 y
y.backward()  # 计算梯度print(x.grad)  # dy/dx = 2x + 3 -> 2*2 + 3 = 7

5.2 阻止梯度计算

x = torch.tensor(2.0, requires_grad=True)with torch.no_grad():y = x**2 + 3*x + 1  # 计算过程中不记录梯度

6. GPU 计算

6.1 设备选择

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

6.2 在 GPU 上创建 Tensor

x = torch.randn(3, 3, device=device)

6.3 在 CPU 和 GPU 之间转换

x_cpu = x.to("cpu")  # 移回 CPU
x_gpu = x.to("cuda")  # 移至 GPU

7. 总的来说

主题关键知识点
Tensor 创建torch.tensor()torch.zeros()torch.rand()
NumPy 互转torch.from_numpy().numpy()
形状变换.view().reshape().unsqueeze()
运算逐元素计算、矩阵运算、统计运算
自动求导requires_grad=True.backward()
GPU 加速torch.device("cuda").to("cuda")

以上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 部署 ClickHouse 教程

Docker 部署 ClickHouse 教程 背景 ClickHouse 是一个开源的列式数据库管理系统(DBMS),主要用于在线分析处理(OLAP)。它专为大数据的实时分析设计,支持高速的查询性能和高吞吐量。ClickHouse 以其高效的数…

建表注意事项(2):表约束,主键自增,序列[oracle]

没有明确写明数据库时,默认基于oracle 约束的分类 用于确保数据的完整性和一致性。约束可以分为 表级约束 和 列级约束,区别在于定义的位置和作用范围 复合主键约束: 主键约束中有2个或以上的字段 复合主键的列顺序会影响索引的使用,需谨慎设计 添加…

Google C++ Style / 谷歌C++开源风格

文章目录 前言1. 头文件1.1 自给自足的头文件1.2 #define 防护符1.3 导入你的依赖1.4 前向声明1.5 内联函数1.6 #include 的路径及顺序 2. 作用域2.1 命名空间2.2 内部链接2.3 非成员函数、静态成员函数和全局函数2.4 局部变量2.5 静态和全局变量2.6 thread_local 变量 3. 类3.…

【HTML入门】Sublime Text 4与 Phpstorm

文章目录 前言一、环境基础1.Sublime Text 42.Phpstorm(1)安装(2)启动Phpstorm(3)“启动”码 二、HTML1.HTML简介(1)什么是HTML(2)HTML版本及历史(3)HTML基本结构 2.HTML简单语法(1)HTML标签语法(2)HTML常用标签(3)表格(4)特殊字符 总结 前言 在当今的软件开发领域&#xff0c…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.20 傅里叶变换:从时域到频域的算法实现

2.20 傅里叶变换:从时域到频域的算法实现 目录 #mermaid-svg-zrRqIme9IEqP6JJE {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zrRqIme9IEqP6JJE .error-icon{fill:#552222;}#mermaid-svg-zrRqIme9IEqP…

刷题记录 动态规划-7: 63. 不同路径 II

题目:63. 不同路径 II 难度:中等 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0])。机器人尝试移动到 右下角(即 grid[m - 1][n - 1])。机器人每次只能向下或者向右移动一步。…

HarmonyOS:给您的应用添加通知

一、通知介绍 通知旨在让用户以合适的方式及时获得有用的新消息,帮助用户高效地处理任务。应用可以通过通知接口发送通知消息,用户可以通过通知栏查看通知内容,也可以点击通知来打开应用,通知主要有以下使用场景: 显示…

Unity飞行代码 超仿真 保姆级教程

本文使用Rigidbody控制飞机,基本不会穿模。 效果 飞行效果 这是一条优雅的广告 如果你也在开发飞机大战等类型的飞行游戏,欢迎在主页搜索博文并参考。 搜索词:Unity游戏(Assault空对地打击)开发。 脚本编写 首先是完整代码。 using System.Co…

图论常见算法

图论常见算法 算法prim算法Dijkstra算法 用途最小生成树(MST):最短路径:拓扑排序:关键路径: 算法用途适用条件时间复杂度Kruskal最小生成树无向图(稀疏图)O(E log E)Prim最小生成树无…

车载软件架构 --- 基于AUTOSAR软件架构的ECU开发流程小白篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…

Linux 传输层协议 UDP 和 TCP

UDP 协议 UDP 协议端格式 16 位 UDP 长度, 表示整个数据报(UDP 首部UDP 数据)的最大长度如果校验和出错, 就会直接丢弃 UDP 的特点 UDP 传输的过程类似于寄信 . 无连接: 知道对端的 IP 和端口号就直接进行传输, 不需要建立连接不可靠: 没有确认机制, 没有重传机制; 如果因…

Android学习21 -- launcher

1 前言 之前在工作中,第一次听到launcher有点蒙圈,不知道是啥,当时还赶鸭子上架去和客户PK launcher的事。后来才知道其实就是安卓的桌面。本来还以为很复杂,毕竟之前接触过windows的桌面,那叫一个复杂。。。 后面查了…

unity学习26:用Input接口去监测: 鼠标,键盘,虚拟轴,虚拟按键

目录 1 用Input接口去监测:鼠标,键盘,虚拟轴,虚拟按键 2 鼠标 MouseButton 事件 2.1 鼠标的基本操作 2.2 测试代码 2.3 测试情况 3 键盘Key事件 3.1 键盘的枚举方式 3.2 测试代码同上 3.3 测试代码同上 3.4 测试结果 4…

简单介绍一下什么是OpenFeign

OpenFeign是什么? OpenFeign是一个声明式的Http客户端,它可以用来发起Http请求 它主要用于SpringCloud微服务之间的通讯,让调用另一个服务的Java方法和调用本地方法一样快速和便捷 之前我们是用RestTemplate写一大堆东西发起Http请求远程调…

Hugging Face GGUF 模型可视化

Hugging Face GGUF 模型可视化 1. Finding GGUF files (检索 GGUF 模型)2. Viewer for metadata & tensors info (可视化 GGUF 模型)References 无知小儿,仙家雄霸天下,依附强者才是唯一的出路。否则天地虽大,也让你们无路可走&#xff0…

Python 与 PostgreSQL 集成:深入 psycopg2 的应用与实践

title: Python 与 PostgreSQL 集成:深入 psycopg2 的应用与实践 date: 2025/2/4 updated: 2025/2/4 author: cmdragon excerpt: PostgreSQL 作为开源关系型数据库的佼佼者,因其强大的功能与性能被广泛应用于各种项目中。而 Python 则因其简洁易用的语法、丰富的库和强大的…

生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (上)

今天小李哥将开启全新的技术分享系列,为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来,生成式 AI 安全市场正迅速发展。据 IDC 预测,到 2025 年全球 AI 安全解决方案市场规模将突破 200 亿美元,年复合增长率超过 30%…

《LLM大语言模型深度探索与实践:构建智能应用的新范式,融合代理与数据库的高级整合》

文章目录 Langchain的定义Langchain的组成三个核心组件实现整个核心组成部分 为什么要使用LangchainLangchain的底层原理Langchain实战操作LangSmithLangChain调用LLM安装openAI库-国内镜像源代码运行结果小结 使用Langchain的提示模板部署Langchain程序安装langserve代码请求格…

开发板上Qt运行的环境变量的三条设置语句的详解

在终端中运行下面三句命令用于配置开发板上Qt运行的环境变量: export QT_QPA_GENERIC_PLUGINStslib:/dev/input/event1 export QT_QPA_PLATFORMlinuxfb:fb/dev/fb0 export QT_QPA_FONTDIR/usr/lib/fonts/设置成功后可以用下面的语句检查设置成功没有 echo $QT_QPA…