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,一经查实,立即删除!

相关文章

996引擎-怪物:Lua 刷怪+清怪+自动拾取

996引擎-怪物:Lua 刷怪+清怪+自动拾取 文件位置NPC脚本参考资料文件位置 文件位置服务端D:\996M2-lua\MirServer-lua\Mir200客户端D:\996M2-lua\996M2_debug\devNPC脚本 服务端\Mir200\Envir\Market_Def\test\test爆率-3.lua -- NPC入口函数 function main(player)-- 获取玩…

git进阶--6---git stash

git进阶–6—git stash 1.需求背景 有时候我们在工作区做了很多的修改,还没到提交的阶段,但是有需要切换到别的分支做一些工作,这时候我们就可以先把工作区的内容保存起来,稍后再做处理这就需要用到git stash,stash翻译为存放&a…

群晖搭建Gitea教程(使用系统自带的postgresql)

基于群晖7.2.2,使用套件中心的gitea,和系统自带的postgresql postgresql: 切换到postgres用户 sudo -I -u postgres 在想要保存数据库的磁盘路径下创建PostgreSql文件夹 初始化数据库文件夹配置 initdb -D ./PostgreSql 备份./PostgreSql路径下的post…

Shell基础:中括号的使用

在Shell脚本中,中括号([ ... ] 和 [[ ... ]])是一种常见的条件测试结构。它们用于进行文件类型检查、值比较以及逻辑判断。通过了解它们的不同特点和用法,能够帮助你编写更加高效、安全且易读的脚本。本文将详细介绍Shell中单中括…

Docker 部署 ClickHouse 教程

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

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

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

为AI聊天工具添加一个知识系统 之86 详细设计之27 数据处理:ETL

本文要点 ETL 数据提取 作为 数据项目的起点。数据的整个三部曲--里程碑式的发展进程: ETL : 1分形 Type()-层次Broker / 2完形 Method() - 维度Delegate /3 整形 Class() - 容器 Agent 1变象。变象 脸谱Extractor - 缠度(物理 皮肤缠度&#xf…

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…

C++滑动窗口技术深度解析:核心原理、高效实现与高阶应用实践

目录 一、滑动窗口的核心原理 二、滑动窗口的两种类型 1. 固定大小的窗口 2. 可变大小的窗口 三、实现细节与关键点 1. 窗口的初始化 2. 窗口的移动策略 3. 结果的更新时机 四、经典问题与代码示例 示例 1:和 ≥ target 的最短子数组(可变窗口…

【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:给您的应用添加通知

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

使用Java操作Redis数据类型的详解指南

SEO Meta Description: 详细介绍如何使用Java操作Redis的各种数据类型,包括字符串、哈希、列表、集合和有序集合,提供代码示例和最佳实践。 介绍 Redis是一种开源的内存数据结构存储,用作数据库、缓存和消息代理。它支持多种数据结构&#…

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

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

图论常见算法

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

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

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

在CentOS服务器上部署DeepSeek R1

在CentOS服务器上部署DeepSeek R1,并通过公网IP与其进行对话,可以按照以下步骤操作: 一、环境准备 系统要求: CentOS 8+(需支持AVX512指令集)。 硬件配置: GPU版本:NVIDIA驱动520+,CUDA 11.8+。 CPU版本:至少16核处理器,64GB内存。 存储空间:原始模型需要30GB,量…

nlp文章相似度

1. 基于词袋模型(Bag of Words) 方法: 将文本表示为词频向量(如TF-IDF),通过余弦相似度计算相似性。 优点:简单快速,适合短文本或主题明显的场景。 缺点:忽略词序和语…

Linux 传输层协议 UDP 和 TCP

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