一、PyTorch简介与安装

1.核心概念

        PyTorch 是一款 Python 深度学习框架,其核心是张量(Tensor) —— 元素为同一种数据类型的多维矩阵,以 “类” 的形式封装,内置了张量运算、处理等方法,是深度学习中数据存储和计算的基础单元。

2.安装命令

        pip install torch===1.10.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

二、张量的创建与类型转换

1.基本创建方式

创建函数功能描述示例代码输出结果
torch.tensor()根据指定数据(标量、列表、NumPy 数组等)创建张量,自动匹配数据类型torch.tensor(10)
torch.tensor([[10.,20.,30.],[40.,50.,60.]])
tensor(10)
tensor([[10.,20.,30.],[40.,50.,60.]])
torch.Tensor()1. 传入形状参数时,创建指定形状的未初始化张量(默认float32
2. 传入列表时,创建包含指定元素的张量
torch.Tensor(2,3)
torch.Tensor([10,20])
tensor([[0.0000e+00, 3.6893e+19, 2.2018e+05],[4.6577e-10, 2.4158e-12, 1.1625e+33]])
tensor([10.,20.])
torch.IntTensor()/FloatTensor()/DoubleTensor()创建指定数据类型的张量,支持形状参数或元素列表(元素会自动类型转换)torch.IntTensor(2,3)
torch.IntTensor([2.5,3.3])
tensor([[0, 1610612736, 1213662609],[805308409, 156041223, 1]], dtype=torch.int32)
tensor([2,3], dtype=torch.int32)

2.线性与随机张量创建

        线性张量

                torch.arange(start,end,step):在(start,end)区间内按步长step生成 1 维张量,元素类型为int64。示例:torch.arange(0,10,2) → tensor([0,2,4,6,8])

                torch.linspace(start,end,step):在[start, end]区间内生成steps个等间隔元素的 1 维张量,默认float32。示例:troch.linspace(0,11,10)-->tensor([0.00,1.22,...,11.00])。

        随机张量与种子设置

        torch.randn(shape):生成符合标准正态分布(均值 0、方差 1)的指定形状张量,默认float32。示例:torch.randn(2,3) → 2 行 3 列的随机张量。

        随机种子:torch.random.manual_seed(seed)固定随机种子,确保每次运行生成相同的随机张量;torch.random.initial_seed()查看当前随机种子。示例:

torch.random.manual_seed(100)
print(torch.randn(2,3))  # 每次运行结果一致
print(torch.random.initial_seed())  # 输出100

3.0-1及指定值张量创建

        全1张量:torch.ones(shape)创建指定形状全 1 张量;torch.ones_like(tensor)根据已有张量形状创建全 1 张量,示例:

data = torch.ones(2,3)  # tensor([[1.,1.,1.],[1.,1.,1.]])
data_like = torch.ones_like(data)  # 与data形状相同的全1张量

        全0张量:torch.zeros(shape)创建指定形状全 0 张量;torch.zeros_like(tensor)根据已有张量形状创建全 0 张量,用法与全 1 张量一致。

        指定量张量:torch.full(shape, value)创建指定形状、元素均为value的张量;torch.full_like(tensor, value)根据已有张量形状创建指定值张量,示例:

data = torch.full([2,3],10)  # tensor([[10,10,10],[10,10,10]])
data_like = torch.full_like(data,20)  # 元素均为20的张量

4.张量类型转换

        data.type(torch.目标类型)显式指定目标类型,支持torch.ShortTensor(int16)、torch.IntTensor(int32)、torch.LongTensor(int64)、torch.FloatTensor(float32)、torch.DoubleTensor(float64)。

data = torch.full([2,3],10)  # dtype=torch.int64
data = data.type(torch.DoubleTensor)  # dtype=torch.float64

        data.目标类型缩写():快捷转换方法,如data.short()(转 int16)、data.int()(转 int32)、data.long()(转 int64)、data.float()(转 float32)、data.double()(转 float64)。

data = torch.full([2,3],10)  # dtype=torch.int64
data = data.double()  # dtype=torch.float64

三、张量与其他数据类型的转换

1.张量转numpy数组

        方法:data_tensor.numpy(),默认共享内存(修改一个,另一个同步变化);若需避免共享,使用data_tensor.numpy().copy()。

# 共享内存
data_tensor = torch.tensor([2,3,4])
data_numpy = data_tensor.numpy()
data_numpy[0] = 100  # data_tensor也变为tensor([100,3,4])# 不共享内存
data_numpy = data_tensor.numpy().copy()
data_numpy[0] = 200  # data_tensor仍为tensor([100,3,4])

2.numpy数组转张量

转换方法内存共享情况示例代码输出结果
torch.from_numpy(data_numpy)默认共享内存data_numpy = np.array([2,3,4])
data_tensor = torch.from_numpy(data_numpy)
tensor([2,3,4], dtype=torch.int32)(与 NumPy 数组类型匹配)
torch.tensor(data_numpy)默认不共享内存data_tensor = torch.tensor(data_numpy)

tensor([2,3,4], dtype=torch.int32)(修改张量不影响原数组)

3.标量张量与数字转换

        对于仅含一个元素的张量(标量张量),使用data.item()提取 Python 原生数字类型(如intfloat)。示例:

data1 = torch.tensor([30,])  # 标量张量
data2 = torch.tensor(30)     # 标量张量
print(data1.item())  # 30(int类型)
print(data2.item())  # 30(int类型)

四、张量数值计算与运算函数

1.基本运算

支持加减乘除、取负等操作,分为不修改原张量修改原张量(函数名带下划线)两类,示例:

data = torch.randint(0,10,[2,3])  # 示例:tensor([[3,7,4],[0,0,6]])# 不修改原张量
new_data = data.add(10)  # 等价于data + 10 → tensor([[13,17,14],[10,10,16]])
new_data = data.sub(5)   # 等价于data - 5
new_data = data.mul(2)   # 等价于data * 2
new_data = data.div(2)   # 等价于data / 2
new_data = data.neg()    # 等价于-data# 修改原张量
data.add_(10)  # data变为tensor([[13,17,14],[10,10,16]])
data.sub_(5)   # data进一步修改

2.点乘与矩阵乘法

        点乘(Hadamard积):两个同形状张量对应元素相乘,使用torch.mul(data1, data2)data1 * data2。示例:

data1 = torch.tensor([[1,2],[3,4]])
data2 = torch.tensor([[5,6],[7,8]])
print(torch.mul(data1, data2))  # tensor([[5,12],[21,32]])
print(data1 * data2)            # 同上

        矩阵乘法:要求第一个张量的列数等于第二个张量的行数(形状为(n,m)(m,p),结果为(n,p)),使用data1 @ data2torch.matmul(data1, data2)。示例:

data1 = torch.tensor([[1,2],[3,4],[5,6]])  # (3,2)
data2 = torch.tensor([[5,6],[7,8]])        # (2,2)
print(data1 @ data2)  # tensor([[19,22],[43,50],[67,78]])(3,2)
print(torch.matmul(data1, data2))  # 同上

3.常见运算函数

函数功能描述示例代码输出结果(基于data = torch.tensor([[4.,0.,7.],[6.,3.,5.]], dtype=torch.float64)
data.mean(dim=None)计算均值,dim=0按列算,dim=1按行算data.mean()
data.mean(dim=0)
tensor(4.1667, dtype=torch.float64)
tensor([5.0000,1.5000,6.0000], dtype=torch.float64)
data.sum(dim=None)计算总和,dim参数用法同meandata.sum()
data.sum(dim=1)
tensor(25., dtype=torch.float64)
tensor([11.,14.], dtype=torch.float64)
torch.pow(data, n)计算元素的 n 次幂torch.pow(data,2)tensor([[16.,0.,49.],[36.,9.,25.]], dtype=torch.float64)
data.sqrt()计算元素的平方根data.sqrt()tensor([[2.0000,0.0000,2.6458],[2.4495,1.7321,2.2361]], dtype=torch.float64)
data.exp()计算元素的自然指数(e^x)data.exp()tensor([[5.4598e+01,1.0000e+00,1.0966e+03],[4.0343e+02,2.0086e+01,1.4841e+02]], dtype=torch.float64)
data.log()/log2()/log10()分别计算自然对数、2 为底对数、10 为底对数data.log()
data.log10()
tensor([[1.3863, -inf,1.9459],[1.7918,1.0986,1.6094]], dtype=torch.float64)
tensor([[0.6021, -inf,0.8451],[0.7782,0.4771,0.6990]], dtype=torch.float64)

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

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

相关文章

SQLAlchemy -> Base.metadata.create_all(engine )详解

目录 一、核心作用 二、是否每次运行项目都会执行? 1. ​​典型场景​​(推荐) 2. ​​需要避免的情况​​ 三、最佳实践建议 1. ​​生产环境​​ 2. ​​开发/测试环境​​ 四、常见问题解答 Q1: 如果表结构改了,creat…

C++异步任务处理与消息可靠性保障指南:从基础到实战

在当今多核处理器普及的时代,程序性能和响应能力的提升成为开发者面临的核心课题。无论是高频交易系统的毫秒级响应需求、实时游戏引擎的流畅交互体验,还是网络服务器的高并发处理能力,异步编程都已成为突破性能瓶颈的关键技术[1]。作为高性能…

LazyForEach性能优化:解决长列表卡顿问题

本文将深入解析HarmonyOS中LazyForEach的工作原理、性能优势、实战优化技巧及常见问题解决方案,帮助你构建流畅的长列表体验。 1. LazyForEach 核心优势与原理 LazyForEach 是鸿蒙ArkUI框架中为高性能列表渲染设计的核心组件,其核心设计思想基于动态加载…

Spring Boot 全栈优化:服务器、数据、缓存、日志的场景应用!

Spring Boot以其“开箱即用”闻名,但默认配置往往在高并发场景下成为瓶颈:Tomcat线程堵塞、数据库连接耗尽、缓存命中率低下、日志洪水般淹没磁盘。想象一个电商微服务,峰值流量下响应迟钝,用户流失——这不是宿命,而是…

Leetcode sql 50 ~5

select product_idfrom Productswhere low_fats Y and recyclable Y;SQL 规定:null 的比较必须用 is null 或 is not null,不能用普通的等号()。# Write your MySQL query statement below select name from Customer where ref…

C#高并发与并行理解处理

目录 1.什么是IO密集型任务/CPU密集型任务 2.高并发概念和技术实现 2.并行(Parallelist)概念和技术实现 4.核心区别对比 1.什么是IO密集型任务/CPU密集型任务 1.IO密集型任务: 定义:任务核心逻辑不依赖CPU计算,而是…

正点原子STM32F407 U盘升级程序(IAP)OTA Bootloader APP USB升级+FATFS+USB Host

正点原子STM32F407 U盘升级程序(IAP)OTA Bootloader APP USB升级FATFSUSB HostChapter0 解决STM32 Bootloader跳转APP失败问题问题背景问题描述问题解决原APP跳转的函数为:修改APP程序main入口处Chapter1 MDK如何生成*.bin格式的文件Chapter2…

MySQL 8.0 在 Ubuntu 22.04 中如何将启用方式改为mysql_native_password(密码认证)

MySQL 8.0 在 Ubuntu 22.04 中默认启用了 auth_socket 认证方式(而非密码认证),导致 mysql_secure_installation 跳过了 root 密码设置。这会直接影响后续用 Navicat 连接 MySQL(因为 Navicat 需要密码登录),必须手动调整 root 用户的认证方式并设置密码。 核心问题:au…

七层网络协议-面试

七层网络协议概述七层网络协议,即OSI(Open Systems Interconnection)模型,是由国际标准化组织(ISO)提出的网络通信框架。它将网络通信过程划分为七个层次,每一层负责特定的功能,并通…

【Blender】二次元人物制作【二】:五官的制作

一、制作眼睛 选中眼眶内部的一圈线。shiftD复制出来调整成圆形,然后F快捷键填充将眼睛放在眼框内合适的位置,并用i键进行几次内插,做出瞳孔,并且将内部的眼瞳做得稍微向内凹陷一点。二、制作睫毛 选中眼眶上半部分的面&#xff0…

Deepin 25 系统安装 Docker:完整教程 + 常见问题解决

Deepin 25 系统安装 Docker:完整教程 常见问题解决 作为基于 Debian 的 Linux 发行版,Deepin 25 因系统目录(如/usr)默认只读的特性,安装 Docker 时需特殊处理 GPG 公钥存储路径。本文结合社区实践,整理出…

Redis MySQL小结

问题1:Redis为什么高效?答:基于内存,reactor,value的数据组织(五种数据结构),KV的数据组织方式(渐进hash)问题2:跳表是什么?和红黑树的…

Flink on YARN 实战问题排查指南(精华版)

一、客户端常见问题速查 ‌1. JAR加载失败终极解法‌报错提示:"Could not build the program from JAR file" 核心原因:80%的情况是Hadoop依赖缺失 黄金配置:export HADOOP_CONF_DIR${HADOOP_HOME}/etc/hadoop export HADOOP_CLASS…

迅为RK3576开发板Android12制作使用系统签名

配套资料在网盘资料“iT0P-RK3576 开发板\02_【iTOP-RK3576 开发板】开发资料\ 08Android 系统开发配套资料\ 07 Android 制作使用系统签名”目录下制作签名文件 在 Android 源码 build/make/target/product/security/下存放着签名文件,如下所示:将北京迅…

django连接minio实现文件上传下载(提供接口示例)

django连接minio实现文件上传下载(提供接口示例)项目环境前提1.模型创建2. 在 settings.py 中添加 MINIO 配置3.创建 MINIO 工具类4.创建序列化器5. 创建视图6. 配置 URL 路由7.接口测试项目环境前提 已安装python3.8以上环境已安装djangorestframework…

Kafka消息队列进阶:发送策略与分区算法优化指南

Kafka消息队列进阶:发送策略与分区算法优化指南 目录Kafka消息队列进阶:发送策略与分区算法优化指南摘要1. Kafka消息发送模式概述1.1 消息发送的核心流程1.2 三种发送模式对比2. 同步发送模式详解2.1 同步发送实现原理2.2 同步发送性能优化3. 异步发送模…

【VScode】ssh报错

【VScode】ssh报错1. ssh报错2. 解决1. ssh报错 Failed to parse remote port from server output 2. 解决 windows电脑删除 C:\Users\username\.ssh\known_hosts linux cd /home/username/.vscode-server/ rm -rf ~/.vscode-server重新回到Vscode连接ok

Grafana+Loki+Alloy构建企业级日志平台

1.日志系统介绍日志系统:GLA、ELK、数仓 ⽇志处理流程:采集 > 存储 > 检索 > 可视化日志系统工作流程:日志平台的目的:统一聚合分散的日志日志平台搭建方案:ELK:ElasticSearch:存储日志&#xff0…

老梁聊全栈系列:(阶段一)现代全栈的「角色边界」与「能力雷达图」

JAVA Vue/React 双栈工程师的「T 型→E 型」进化指南 接上篇《从单体到云原生的演进脉络》 大家好,我是技术老梁,这是系列文章的第五篇。欢迎大家讨论,分享经验。如果知识对你有用,关注我,多多支持老梁,鼓…

使用 C# 设置 Excel 单元格格式

在实际报表开发中,Excel 的可读性和美观性与数据本身同样重要。合理的单元格格式设置不仅能让数据一目了然,还能让报表显得更专业。通过使用 C#,开发者可以精确控制 Excel 文件的单元格样式,无需依赖 Microsoft Office。 本文演示…