PyTorch的Tensor(张量)

news2025/1/20 18:37:45

一、Tensor概念

什么是张量?

张量是一个多维数组,它是标量、向量、矩阵的高维拓展
在这里插入图片描述

Tensor与Variable

Variable是torch.autograd中的数据类型,主要用于封装Tensor,进行自动求导。

  • data: 被包装的Tensor
  • grad: data的梯度(梦回数一
  • grad_fn: 创建Tensor的Function,是自动求导的关键
  • requires_grad: 指示是否需要梯度
  • is_leaf: 指示是否是叶子节点(张量)

在这里插入图片描述

Tensor

PyTorch 0.4.0版本开始,Variable已并入Tensor。

  • dtype: 张量的数据类型,例如torch.FloatTensor, torch.cuda.FloatTensor
  • shape: 张量的形状,例如 (64, 3, 224, 224)
  • device: 张量所在设备,GPU/CPU,是加速的关键
    在这里插入图片描述

在这里插入图片描述

Create Tensor

一、直接创建

torch.tensor(
    data,
    dtype=None,
    device=None,
    requires_grad=False,
    pin_memory=False
)

功能:从data创建tensor

• data: 数据, 可以是list, numpy
• dtype : 数据类型,默认与data的一致
• device : 所在设备, cuda/cpu
• requires_grad:是否需要梯度
• pin_memory:是否存于锁页内存

torch.from_numpy(ndarray)
功能:从numpy创建tensor。
注意事项:从torch.from_numpy创建的 tensor 与原始 ndarray 共享内存。
当修改其中一个的数据时,另一个也会被改动。

在这里插入图片描述

二、依据数值创建

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

功能:依照size创建全0张量

• size: 张量的形状, 如(3, 3)、(3, 224,224)
• out : 输出的张量
• layout : 内存中布局形式, 有strided,sparse_coo等
• device : 所在设备, gpu/cpu
• requires_grad:是否需要梯度

torch.zeros_like(
    input,
    dtype=None,
    layout=None,
    device=None,
    requires_grad=False
)

功能:依照 input 形状创建全0张量

参数说明:

  • input: 作为模板的输入张量,新创建的张量将具有与此张量相同的形状和数据类型。
  • dtype(可选): 新创建张量的数据类型,默认为 None(即与输入张量相同)。
  • layout(可选): 新创建张量的布局,默认为 None(即与输入张量相同)。
  • device(可选): 新创建张量所在设备,默认为 None(即与输入张量相同)。
  • requires_grad(可选): 是否需要计算梯度,默认为 False,即不需要计算梯度。
torch.ones(
    *size,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False
)

参数说明:

  • *size: 张量的形状,可以是一个数字或一个元组,用来指定张量每个维度的大小。
  • out(可选): 输出张量。
  • dtype(可选): 张量的数据类型,默认为 None,即自动推断。
  • layout(可选): 张量的布局,默认为 torch.strided。
  • device(可选): 张量所在设备,默认为 None,即 CPU。
  • requires_grad(可选): 是否需要计算梯度,默认为 False,即不需要计算梯度。
torch.ones_like(
    input,
    dtype=None,
    layout=None,
    device=None,
    requires_grad=False
)

参数说明:

  • input: 作为模板的输入张量,新创建的张量将具有与此张量相同的形状和数据类型。
  • dtype(可选): 新创建张量的数据类型,默认为 None,即与输入张量相同。
  • layout(可选): 新创建张量的布局,默认为 None,即与输入张量相同。
  • device(可选): 新创建张量所在设备,默认为 None,即与输入张量相同。
  • requires_grad(可选): 是否需要计算梯度,默认为 False,即不需要计算梯度。
  • torch.ones() 用于创建所有元素值为1的张量,而 torch.ones_like() 则创建与输入张量形状相同的张量,但所有元素的值都为1。这两个函数都可以选择性地指定数据类型、布局、设备和是否需要计算梯度。
torch.full(
    size,
    fill_value,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False
)

参数说明:

  • size: 张量的形状,可以是一个数字或一个元组,用来指定张量每个维度的大小。
  • fill_value: 填充张量的值,可以是标量或与指定数据类型相同的张量。
  • out(可选): 输出张量。
  • dtype(可选): 张量的数据类型,默认为 None,即自动推断。
  • layout(可选): 张量的布局,默认为 torch.strided。
  • device(可选): 张量所在设备,默认为 None,即 CPU。
  • requires_grad(可选): 是否需要计算梯度,默认为 False,即不需要计算梯度。

这个函数用于创建指定形状并用指定值填充的张量。填充值可以是一个标量或与指定数据类型相同的张量。可以选择性地指定数据类型、布局、设备和是否需要计算梯度。

torch.arange(
    start=0,
    end,
    step=1,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False
)

参数说明:

  • start: 序列起始值,默认为 0。
  • end: 序列结束值(不包含),创建的序列不包含该值。
  • step: 序列中相邻值之间的步长,默认为 1。
  • out(可选): 输出张量。
  • dtype(可选): 张量的数据类型,默认为 None,即自动推断。
  • layout(可选): 张量的布局,默认为 torch.strided。
  • device(可选): 张量所在设备,默认为 None,即 CPU。
  • requires_grad(可选): 是否需要计算梯度,默认为 False,即不需要计算梯度。

这个函数用于创建一个从 start 到 end(不包含 end)的数值序列,并以 step 为步长。可以选择性地指定数据类型、布局、设备和是否需要计算梯度。

torch.linspace(
    start,
    end,
    steps=100,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False
)

参数说明:

  • start: 序列起始值。
  • end: 序列结束值。
  • steps: 序列中的元素数量,默认为 100。
  • out(可选): 输出张量。
  • dtype(可选): 张量的数据类型,默认为 None,即自动推断。
  • layout(可选): 张量的布局,默认为 torch.strided。
  • device(可选): 张量所在设备,默认为 None,即 CPU。
  • requires_grad(可选): 是否需要计算梯度,默认为 False,即不需要计算梯度。

这个函数创建一个在指定范围内(从 start 到 end)以均匀间隔的方式生成的数值序列,并且序列的元素数量由 steps 参数指定。可以选择性地指定数据类型、布局、设备和是否需要计算梯度。

torch.logspace(
    start,
    end,
    steps=100,
    base=10.0,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False
)

参数说明:

  • start: 序列起始值的指数。
  • end: 序列结束值的指数。
  • steps: 序列中的元素数量,默认为 100。
  • base: 序列中的数值以此为底进行指数计算,默认为 10.0。
  • out(可选): 输出张量。
  • dtype(可选): 张量的数据类型,默认为 None,即自动推断。
  • layout(可选): 张量的布局,默认为 torch.strided。
  • device(可选): 张量所在设备,默认为 None,即 CPU。
  • requires_grad(可选): 是否需要计算梯度,默认为 False,即不需要计算梯度。

这个函数创建一个在对数刻度上以均匀间隔分布的数值序列,start 和 end 参数指定序列起始值和结束值的指数,base 参数确定对数的底。可以选择性地指定数据类型、布局、设备和是否需要计算梯度。

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

参数说明:

  • n: 矩阵的行数。
  • m(可选): 矩阵的列数,默认为 None,如果为 None,则创建的是 n x n 的方阵。
  • out(可选): 输出张量。
  • dtype(可选): 张量的数据类型,默认为 None,即自动推断。
  • layout(可选): 张量的布局,默认为 torch.strided。
  • device(可选): 张量所在设备,默认为 None,即 CPU。
  • requires_grad(可选): 是否需要计算梯度,默认为 False,即不需要计算梯度。

这个函数可以创建一个单位矩阵。如果提供了 m 参数,则创建的是一个 n x m 的矩阵,否则创建的是 n x n 的方阵。可以选择性地指定数据类型、布局、设备和是否需要计算梯度。

三、依概率分布创建张量

torch.normal(
    mean,
    std,
    out=None
)

torch.normal() 是 PyTorch 中用于生成服从指定均值和标准差的正态分布随机数的函数。以下是该函数的参数说明:

  • mean: 正态分布的均值。
  • std: 正态分布的标准差。
  • out(可选): 输出张量,用于保存生成的随机数。
torch.normal(
    mean,
    std,
    out=None
)

用于生成服从指定均值和标准差的正态分布随机数。

  • mean: 正态分布的均值。
  • std: 正态分布的标准差。
  • out(可选): 输出张量,用于保存生成的随机数。
torch.normal(
    mean,
    std,
    size,
    out=None
)

  • mean: 正态分布的均值。
  • std: 正态分布的标准差。
  • size: 生成张量的形状。
  • out(可选): 输出张量,用于保存生成的随机数。

四种模式:
mean为标量,std为标量
mean为标量,std为张量
mean为张量,std为标量
mean为张量,std为张量

这个函数与前一个函数类似,但是多了一个 size 参数,用于指定生成张量的形状。返回一个形状为 size 的张量,其中的元素服从均值为 mean、标准差为 std 的正态分布。可以选择性地提供一个输出张量 out 用于保存生成的随机数。

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

torch.rand() 是 PyTorch 中用于生成服从标准正态分布(均值为0,标准差为1)的随机数的函数。以下是该函数的参数说明:

torch.rand(
    *size,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False
)
  • *size: 张量的形状,可以是一个数字或一个元组,用来指定张量每个维度的大小。
  • out(可选): 输出张量,用于保存生成的随机数。
  • dtype(可选): 张量的数据类型,默认为 None,即自动推断。
  • layout(可选): 张量的布局,默认为 torch.strided。
  • device(可选): 张量所在设备,默认为 None,即 CPU。
  • requires_grad(可选): 是否需要计算梯度,默认为 False,即不需要计算梯度。

这个函数返回一个张量,其中的元素是在区间 [0, 1) 上均匀分布的随机数,形状由参数 *size 指定。可以选择性地指定数据类型、布局、设备和是否需要计算梯度。

torch.randint(
    low=0,
    high,
    size,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False
)
  • low: 区间的下界(包含在内)。
  • high: 区间的上界(不包含在内)。
  • size: 生成张量的形状。
  • out(可选): 输出张量,用于保存生成的随机整数。
  • dtype(可选): 张量的数据类型,默认为 None,即自动推断。
  • layout(可选): 张量的布局,默认为 torch.strided。
  • device(可选): 张量所在设备,默认为 None,即 CPU。
  • requires_grad(可选): 是否需要计算梯度,默认为 False,即不需要计算梯度。

这个函数返回一个张量,其中的元素是在区间 [low, high) 上均匀分布的随机整数,形状由参数 size 指定。

三、依概率分布创建张量

这个函数用于生成随机排列和按照伯努利分布生成随机二元数。

torch.randperm(
    n,
    out=None,
    dtype=torch.int64,
    layout=torch.strided,
    device=None,
    requires_grad=False
)

参数说明:

  • n: 生成随机排列的长度。
  • out(可选): 输出张量,用于保存生成的随机排列。
  • dtype(可选): 张量的数据类型,默认为 torch.int64。
  • layout(可选): 张量的布局,默认为 torch.strided。
  • device(可选): 张量所在设备,默认为 None,即 CPU。
  • requires_grad(可选): 是否需要计算梯度,默认为 False,即不需要计算梯度。

这个函数返回一个长度为 n 的张量,包含从 0 到 n-1 的随机排列整数。

torch.bernoulli(
    input,
    *,
    generator=None,
    out=None
)

  • input: 输入张量,用于指定伯努利分布的概率值。
  • generator(可选): 随机数生成器,默认为 None。
  • out(可选): 输出张量,用于保存生成的随机二元数。

这个函数返回一个张量,其中的元素按照输入张量中的概率值在伯努利分布上进行采样生成随机二元数(0 或 1)。

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

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

相关文章

windows进行udp端口转发,解决项目中服务器收不到组播数据的问题

说明 windows7的netsh interface portproxy命令只支持tcp端口转发 如果要进行udp端口转发可以使用sokit 运行sokit 端口转发(以为tcp作为讲解,udp类似) 选择转发器 输入监听地址(SRC地址)和端口 输入转发地址&am…

【Linux】Linux 下基本指令 -- 详解

无论是什么命令,用于什么用途,在 Linux 中,命令有其通用的格式: command [-options] [parameter] command:命令本身。-options:[可选,非必填]命令的一些选项,可以通过选项控制命令的…

MySQL存储过程、创建、调用、查看、删除、存储过程与函数的额区别、缺陷等、存储过程写分页等

MySQL存储过程 1、存储过程的定义2、存储过程使用的意义3、存储过程的创建4、存储过程的调用5、存储过程的查看6、存储过程的删除7、存储及过程与函数的区别8、存储过程的缺陷9、存储过程写分页 1、存储过程的定义 存储过程:存储过程(Stored Procedure&…

【Java EE初阶三 】线程的状态与安全(下)

3. 线程安全 线程安全:某个代码,不管它是单个线程执行,还是多个线程执行,都不会产生bug,这个情况就成为“线程安全”。 线程不安全:某个代码,它单个线程执行,不会产生bug&#xff0c…

【第5期】前端Vue使用Proxy+Vuex(store、mutations、actions)跨域调通本地后端接口

本期简介 本期要点 本地开发前后端如何跨域调用全局请求、响应处理拦截器处理封装HTTP请求模块编写API请求映射到后端API数据的状态管理 一、 本地开发前后端如何跨域调用 众所周知,只要前端和后端的域名或端口不一样,就存在跨域访问,例如&…

QString设置小数点精度位数

QString设置小数点精度位数 Chapter1 QString设置小数点精度位数Chapter2 Qt中QString.toDouble有效位数6位问题以及数据小数点有效位数的处理问题一:QString.toDouble有效位只有6位问题二:小数点有效位数的问题 Chapter3 qt QString转Double只显示6位数字的问题(精…

FTP的基本介绍

FTP ftp的介绍: ftp是一个可以提供共享文件的服务器,他可以通过iis.msc也就是windows 的服务器管理器来打开,或者通过cmd命令行打开 如何使用iis.msc打开ftp,如何使用cmd打开ftp ,如何匿名登录ftp,ftp和…

设计模式-调停者模式

设计模式专栏 模式介绍模式特点应用场景调停者模式与命令模式的比较代码示例Java实现调停者模式Python实现调停者模式 调停者模式在spring中的应用 模式介绍 调停者模式是一种软件设计模式,主要用于模块间的解耦,通过避免对象之间显式的互相指向&#x…

YOLOv8改进 | 2023注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制)

一、本文介绍 本文给家大家带来的改进机制是iRMB,其是在论文Rethinking Mobile Block for Efficient Attention-based Models种提出,论文提出了一个新的主干网络EMO(后面我也会教大家如何使用该主干,本文先教大家使用该文中提出的注意力机制…

Java超高精度无线定位技术--UWB (超宽带)人员定位系统源码

UWB室内定位技术是一种全新的、与传统通信技术有极大差异的通信新技术。它不需要使用传统通信体制中的载波,而是通过发送和接收具有纳秒或纳秒级以下的极窄脉冲来传输数据,从而具有GHz量级的带宽。 UWB(超宽带)高精度定位系统是一…

08.哲说建造者模式(Builder Pattern)

“The odds that we’re in ‘base reality’ is one in billions.” —— Elon Musk 这段话出自马斯克在2016年的一次演讲,“人类活在真实世界的几率,可能不到十亿分之一”。此言一出,可谓一石激起千层浪。有人嘲讽马斯克是“语不惊人死不休…

论文阅读——SG-Former

SG-Former: Self-guided Transformer with Evolving Token Reallocation 1. Introduction 方法的核心是利用显著性图,根据每个区域的显著性重新分配tokens。显著性图是通过混合规模的自我关注来估计的,并在训练过程中自我进化。直观地说,我们…

3D视觉-相机选用的原则

鉴于不同技术方案都有其适用的场景,立体相机的选型讲究的原则为“先看用途,再看场景,终评精度”,合适的立体相机在方案中可以起到事半功倍的效果。从用途上来进行划分,三维视觉方案主要应用在两个方向:测量…

PyTorch常用工具(1)数据处理

文章目录 前言1 数据处理1.1 Dataset1.2 DataLoader 前言 在训练神经网络的过程中需要用到很多的工具,最重要的是数据处理、可视化和GPU加速。本章主要介绍PyTorch在这些方面常用的工具模块,合理使用这些工具可以极大地提高编程效率。 由于内容较多&am…

【每日一题】一周中的第几天

文章目录 Tag题目来源解题思路方法一:模拟 写在最后 Tag 【模拟】【数学】【2023-12-30】 题目来源 1185. 一周中的第几天 解题思路 方法一:模拟 思路 题目中的日期是在 1971 到 2100 年之间的有效日期,即 1971-01-01 到 2100-12-31 范围…

Scene Creator

场景创建器是一个方便、易于使用的编辑工具,旨在简化创建新场景的过程。使用场景创建器,您可以选择一个模板场景,定义一个目录来存储您的场景,并在需要时自动将新场景添加到构建中。 下载: ​​Unity资源商店链接 资…

数据结构:第7章:查找(复习)

目录 顺序查找: 折半查找: 二叉排序树: 4. (程序题) 平衡二叉树: 顺序查找: ASL 折半查找: 这里 j 表示 二叉查找树的第 j 层 二叉排序树: 二叉排序树(Binary Search Tree&…

李宏毅 自然语言处理(Voice Conversion) 笔记

前一章笔记:李宏毅 自然语言处理(Speech Recognition) 笔记 引入 什么是voice conversion? 输入一段声音,输出另一段声音,我们希望这两端声音:内容一样,其他方面不一样&#xff08…

6个火爆全网的AI开源项目,用上月10万+

标题月10万可能说的有点夸张和含糊,10万具体指的是你可以利用这些开源项目实现: 访问量10万 收入10万 用户10万 …… 开源项目只是免费的工具,具体怎么实现还需要你根据自己需求去深入运营。这里只是给你推荐一些比较热门的开源项目&…

html-css-js移动端导航栏底部固定+i18n国际化全局

需求:要做一个移动端的仿照小程序的导航栏页面操作,但是这边加上了i18n国家化,由于页面切换的时候会导致国际化失效,所以写了这篇文章 1.效果 切换页面的时候中英文也会跟着改变,不会导致切换后回到默认的语言 2.实现…