首页 > 其他分享 >PyTorch使用教程(2)-torch包

PyTorch使用教程(2)-torch包

时间:2025-01-16 18:31:03浏览次数:3  
标签:None tensor 示例 torch 教程 张量 PyTorch size

1、简介

torch包是PyTorch框架最外层的包,主要是包含了张量的创建和基本操作、随机数生成器、序列化、局部梯度操作的上下文管理器等等,内容很多。我们基础学习的时候,只有关注张量的创建、序列化,随机数、张量的数学数学计算等常用的点即可。
在这里插入图片描述

2、什么是张量

在PyTorch中,张量(Tensor)是一个核心概念,它是深度学习和科学计算的基础数据结构。在PyTorch的整个计算过程中,所有的数据结构都是以张量的形式表现。例如输入的图像、标签,输出的结构等,最终都是以张量的形式进入PyTorch的计算图。

  1. 定义:张量是一个多维数组,可以看作是标量、向量、矩阵的高维扩展。
  2. 性质
    • 张量具有任意维度,可以是0维(标量)、1维(向量)、2维(矩阵)或更高维度。
    • 张量支持各种数学运算,包括加法、乘法、卷积等,这些运算可以高效地在CPU或GPU上执行。
    • 张量可以跟踪计算图,并通过反向传播计算梯度,这对于深度学习中的优化任务至关重要。
  3. 张量的属性
    • 形状(shape):张量的形状定义了其维度和每个维度上的大小,如形状为(2, 3, 4)的张量表示具有2个深度、每个深度包含3行4列的3D数组。
    • 数据类型(dtype):张量中的元素具有特定的数据类型,如浮点数(float32float64)或整数(int32int64)等。
    • 设备(device):张量可以存储在CPU或GPU上,通过指定设备参数可以在不同设备之间创建或移动张量。

3、torch包的张量操作

3.1 张量创建

1. 创建全0的张量

torch.zeros(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor

参数

  • size (int…) – 定义输出张量形状的整数序列。可以是可变数量的参数或类似列表或元组的集合。

示例

>>> torch.zeros(2, 3)
tensor([[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]])
>>> torch.zeros(5)
tensor([ 0.,  0.,  0.,  0.,  0.])

2. 创建全1的张量

torch.ones(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor

参数

  • size (int…) – 定义输出张量形状的一系列整数。可以是可变数量的参数或类似列表或元组的集合。

示例

>>> torch.ones(2, 3)
tensor([[ 1.,  1.,  1.],
        [ 1.,  1.,  1.]])

>>> torch.ones(5)
tensor([ 1.,  1.,  1.,  1.,  1.])

3. 创建未初始化数据的张量

torch.empty(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False, memory_format=torch.contiguous_format) → Tensor

参数

  • size (int…) – 定义输出张量形状的整数序列。可以是可变数量的参数或集合,如列表或元组。

示例

>>> torch.empty((2,3), dtype=torch.int64)
tensor([[ 9.4064e+13,  2.8000e+01,  9.3493e+13],
        [ 7.5751e+18,  7.1428e+18,  7.5955e+18]])

4. 创建对角线上的元素为1的二维张量

torch.eye(n, m=None, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor

参数

  • n (int) – 行数

示例

>>> torch.eye(3)
tensor([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]])

5. 创建填充指定值的张量

torch.full(size, fill_value, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor

参数

  • size (int…) – 定义输出张量形状的整数列表、元组或 torch.Size。
  • fill_value (标量) – 用于填充输出张量的值。

示例

>>> torch.full((2, 3), 3.141592)
tensor([[ 3.1416,  3.1416,  3.1416],
        [ 3.1416,  3.1416,  3.1416]])

6. 从NumPy 数组创建的张量:from_numpy
示例

>>> a = numpy.array([1, 2, 3])
>>> t = torch.from_numpy(a)
>>> t
tensor([ 1,  2,  3])
>>> t[0] = -1
>>> a
array([-1,  2,  3])

7. 判断一个Obj是不是张量:is_tensor
示例

>>> x = torch.tensor([1, 2, 3])
>>> torch.is_tensor(x)
True

3.2 张量操作

1. reshape操作

torch.reshape(input, shape) → Tensor

参数

  • input (Tensor) – 需要形状改变的张量
  • shape (tuple of int) – 新形状

示例

>>> a = torch.arange(4.)
>>> torch.reshape(a, (2, 2))
tensor([[ 0.,  1.],
        [ 2.,  3.]])
>>> b = torch.tensor([[0, 1], [2, 3]])
>>> torch.reshape(b, (-1,))
tensor([ 0,  1,  2,  3])

2. cat操作
在给定的维度上连接给定的张量序列。所有张量必须具有相同的形状(连接维度除外),或者是一个大小为 (0,) 的一维空张量。

torch.cat(tensors, dim=0, *, out=None) → Tensor

参数

  • tensors (sequence of Tensors) – 任何相同类型的张量 Python 序列。提供的非空张量必须具有相同的形状,连接维度除外。
  • dim (int, optional) – 连接张量的维度
    示例
>>> x = torch.randn(2, 3)
>>> x
tensor([[ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497]])
>>> torch.cat((x, x, x), 0)
tensor([[ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497],
        [ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497],
        [ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497]])
>>> torch.cat((x, x, x), 1)
tensor([[ 0.6580, -1.0969, -0.4614,  0.6580, -1.0969, -0.4614,  0.6580,
         -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497, -0.1034, -0.5790,  0.1497, -0.1034,
         -0.5790,  0.1497]])

3. squeeze操作
返回一个张量,其中所有指定维度的 input 大小为 1 的维度都被移除。

torch.squeeze(input, dim=None) → Tensor

示例

>>> x = torch.zeros(2, 1, 2, 1, 2)
>>> x.size()
torch.Size([2, 1, 2, 1, 2])
>>> y = torch.squeeze(x)
>>> y.size()
torch.Size([2, 2, 2])
>>> y = torch.squeeze(x, 0)
>>> y.size()
torch.Size([2, 1, 2, 1, 2])
>>> y = torch.squeeze(x, 1)
>>> y.size()
torch.Size([2, 2, 1, 2])
>>> y = torch.squeeze(x, (1, 2, 3))
torch.Size([2, 2, 2])

4、 随机数

4.1随机数发生器配置

1. seed操作
将所有设备上生成随机数的种子设置为非确定性随机数。返回用于为 RNG 播种的 64 位数字。
示例

>>> torch.seed()
269874079427000

2. 手动设置随机数的种子值:manual_seed
设置所有设备上生成随机数的种子。
示例

>>> torch.manual_seed(torch.seed())
<torch._C.Generator object at 0x0000022952198270>

4.2 创建随机张量

1. torch.rand
创建一个张量,其中填充了来自 [0,1) 区间上的均匀分布的随机数。

torch.rand(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) → Tensor

参数

  • size (int…) – 定义输出张量形状的整数序列。可以是可变数量的参数或像列表或元组这样的集合。

示例

>>> torch.rand(4)
tensor([ 0.5204,  0.2503,  0.3525,  0.5673])
>>> torch.rand(2, 3)
tensor([[ 0.8237,  0.5781,  0.6879],
        [ 0.3816,  0.7249,  0.0998]])

2. randint
创建一个张量,其中填充了在 low(包含)和 high(不包含)之间均匀生成的随机整数。

torch.randint(low=0, high, size, \*, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor

参数

  • low (int, 可选) – 从分布中抽取的最低整数。默认值:0。
  • high (int) – 从分布中抽取的最高整数加 1。
  • size (tuple) – 定义输出张量形状的元组。

示例

>>> torch.randint(3, 5, (3,))
tensor([4, 3, 4])

>>> torch.randint(10, (2, 2))
tensor([[0, 2],
        [5, 5]])

>>> torch.randint(3, 10, (2, 2))
tensor([[4, 5],
        [6, 7]])

5、张量的保存和加载

1. 保存
将张量保存到磁盘文件。

torch.save(obj, f, pickle_module=pickle, pickle_protocol=DEFAULT_PROTOCOL, _use_new_zipfile_serialization=True)

PyTorch 的常见约定是使用 .pt 文件扩展名保存张量。

参数

  • obj (对象) – 保存的对象
  • f -保存的命名

示例

>>> x = torch.tensor([0, 1, 2, 3, 4])
>>> torch.save(x, "tensor.pt")

2. 加载
从文件中加载使用 torch.save() 保存的对象。

torch.load(f, map_location=None, pickle_module=pickle, *, weights_only=False, mmap=None, **pickle_load_args)

参数

  • f 类文件对象(必须实现 read()、readline()、tell() 和 seek()),或包含文件名的字符串或 os.PathLike 对象
  • map_location (可选[联合[可调用[[Storage, str], Storage], device, str, Dict[str, str]]]) – 一个函数、torch.device、字符串或一个字典,指定如何重新映射存储位置

当在包含 GPU 张量文件上调用torch.load()时,默认情况下,这些张量将加载到 GPU。可以调用torch.load(…, map_location=‘cpu’),然后load_state_dict()来避免在加载模型检查时出现 GPU 内存激增。

load函数的用法较多,可以通过pick_module参数传入自定义的序列化和反序列化的模块,可以通过字节流、文件对象等进行张量加载。详细的用法可以访问官网的API文档进行查看:https://pytorch.ac.cn/docs/stable/generated/torch.load.html#torch.load。

示例

# 加载张量至CPU
>>> torch.load("tensors.pt", map_location=torch.device("cpu"), weights_only=True)
# 加载张量至 GPU 1
>>> torch.load(
...     "tensors.pt",
...     map_location=lambda storage, loc: storage.cuda(1),
...     weights_only=True,
... )  # type: ignore[attr-defined]

6、张量的基础数学计算

张量的数学计算部分主要是包含了逐元素的线性计算、统计信息计算、比较操作、FFT相关的频域操作等等。
在这里插入图片描述
1. 绝对值

torch.abs(input, *, out=None) → Tensor

示例

>>> torch.abs(torch.tensor([-1, -2, 3]))
tensor([ 1,  2,  3])

2. 三角函数相关
cos、acos、sin、asin、tan、atan、atan2等等。
示例

>>> a = torch.randn(4)
>>> a
tensor([-0.5461,  0.1347, -2.7266, -0.2746])
>>> torch.sin(a)
tensor([-0.5194,  0.1343, -0.4032, -0.2711])

3. 统计信息相关
和值sum、均值标准差std_mean、中值median、最大值max、最小值min等等。

>>> a = torch.tensor(
...     [[ 0.2035,  1.2959,  1.8101, -0.4644],
...      [ 1.5027, -0.3270,  0.5905,  0.6538],
...      [-1.5745,  1.3330, -0.5596, -0.6548],
...      [ 0.1264, -0.5080,  1.6420,  0.1992]])
>>> torch.std_mean(a, dim=0, keepdim=True)
(tensor([[1.2620, 1.0028, 1.0957, 0.6038]]),
 tensor([[ 0.0645,  0.4485,  0.8707, -0.0665]]))

7、小结

主要介绍了PyTorch框架中torch包的常用组件,包含张量的创建和基本操作、张量的保存和加载以及随机数、张量的基础数学运算等相关操作。

标签:None,tensor,示例,torch,教程,张量,PyTorch,size
From: https://blog.csdn.net/evm_doc/article/details/145185345

相关文章

  • Adobe After Effects 2024下载安装教程附软件包怎样使用
    AfterEffects2024是专业视频特效制作软件,在影视、动画、广告等领域应用广泛。它的功能十分强大,能创建电影级的字幕、片头和过渡效果,还能从视频中删除物体,做出下雨、火焰等粒子特效。在合成方面,支持多层视频合成,可对视频片段进行剪辑、调色等操作。动画制作上,有关键帧动画、......
  • 【深度学习教程】Python 如何用 LSTM 做情感分析?小白也能上手!
    【深度学习教程】如何用LSTM做情感分析?小白也能上手!Hello大家好,今天我们来聊一个超热门的话题——LSTM网络在情感分析中的应用!想象一下,通过深度学习,你的代码可以读懂人类情绪,知道“我爱你”和“我讨厌你”的区别,是不是很酷?今天这篇文章,我会手把手教你从零开始,用Python和Ke......
  • 【教程4>第5章>第11节】QPSK调制与相位偏差模拟FPGA实现
    本课程学习成果预览 欢迎订阅FPGA/MATLAB/Simulink系列教程《★教程1:matlab入门100例》《★教程2:fpga入门100例》《★教程3:simulink入门60例》《★教程4:FPGA/MATLAB/Simulink联合开发入门与进阶X例》目录1.软件版本2.QPSK调制理论简介3.QPSK调制与相位偏差模拟......
  • 【详细教程】如何下载超星学习通(学银在线)上面的视频课件资料ppt、pdf
    前言:很多同学都想知道超星学习通中课程资料怎么下载,但是超星学习通中某个课程的目录中展示的资料是不提供直接下载方式的,所以下面就教大家如何下载超星学习通目录中展示的视频课件资料,包括PPT和PDF。一、电脑登录超星学习通网页版,复制课程链接【https://i.chaoxing.com】二、将......
  • C++17 Filesystem 实用教程
    C++17标准带来了std::filesystem库,提供了强大的工具来处理文件路径,目录以及其他与文件系统相关的操作.这篇文章适合C++初学者以及希望掌握C++17新特性的开发者,旨在帮助他们高效地完成文件系统相关任务.什么是std::filesystem?std::filesystem是C++标准库的一部......
  • C# WinForm自定义仪表盘控件开发教程
    学习上位机开发,自然离不开自定义控件开发。Windows窗体支持三种类型的用户定义的控件:复合控件、扩展控件和自定义控件。这里的自定义控件主要是指基于GDI+技术实现控件的绘制,最终实现效果如下所示:这个控件可以作为仪表盘数据显示,也可以作为进度条来使用。一、项目创建1......
  • 上交2025最新-《动手学大模型》实战教程及ppt分享!
    本课介绍今天分享一个上海交大的免费的大模型课程,有相关教程文档和Slides,目前是2.2K星标,还是挺火的!《动手学大模型》系列编程实践教程,由上海交通大学2024年春季《人工智能安全技术》课程(NIS3353)讲义拓展而来(教师:张倬胜),旨在提供大模型相关的入门编程参考。通过简单实践,帮......
  • Ubuntu升级Linux内核教程
    本文作者CVE-柠檬i:https://www.cnblogs.com/CVE-Lemon本文使用的方法是dpkg安装,目前版本为5.4.0-204,要升级成5.8.5版本下载下载网站:https://kernel.ubuntu.com/mainline/在该网站下载deb包,选择自己想要升级的版本,这里是5.8.5https://kernel.ubuntu.com/mainline/v5.8.5/am......
  • 从零开始打造AI知识库:使用爬虫自动化采集网页内容的完整教程
    言简意赅的讲解crawler爬虫解决的痛点童鞋们在实现私有化大语言模型和实现精准参数归纳与程序执行之后还是不满足AI相关的能力。在AI驱动的知识管理时代,快速搭建属于自己的知识库已成为很多开发者和团队的核心需求。本文将带你一步步创建一个基于网页爬取的知识库,并将其......
  • Gradio快速入门详细教程
    Gradio是什么?Gradio是一个开源的Python软件包,可以快速为你的机器学习模型、API或任意Python函数构建一个演示或Web应用程序。你可以通过Gradio内置的共享功能在几秒钟内分享你的演示链接。不需要JavaScript、CSS或Web托管经验!只需几行Python代码即可创建你......