PyTorch的Tensor(张量)

一、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.mfbz.cn/a/283060.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Spring Security】快速入门之案例实操

目录 一、简介 1、什么是安全框架 2、主流的安全框架 3、为什么使用Spring Security 二、引言 1、什么是Spring Security 2、Spring Security工作原理 3、特点 三、快速入门 1、引入依赖 2、配置 3、启动测试 4、配置自定义账号密码 四、Web安全配置类 1.HttpSe…

【Linux操作系统】探秘Linux奥秘:文件系统的管理与使用

🌈个人主页:Sarapines Programmer🔥 系列专栏:《操作系统实验室》🔖诗赋清音:柳垂轻絮拂人衣,心随风舞梦飞。 山川湖海皆可涉,勇者征途逐星辉。 目录 🪐1 初识Linux OS &…

ACES 增强版不丹水稻作物地图(2016-2022 年)

ACES 增强版不丹水稻作物地图(2016-2022 年) 用于改善粮食安全决策的 2016-2022 年年度作物类型稻米地图仍然是不丹的一项挑战。这些地图是与不丹农业部和 SERVIR 合作开发的。通过专注于发展不丹的科学、技术、工程和数学 (STEM),我们共同开…

【瞎折腾/3D】无父物体下物体的旋转与移动

目录 说在前面移动World SpaceLocal Space 旋转World SpaceLocal Space 代码 说在前面 测试环境:Microsoft Edge 120.0.2210.91three.js版本:0.160.0其他:本篇文章中只探讨了无父对象下的移动与旋转,有父对象的情况将在下篇文章中…

Oracle merge into 语句用法 Oracle merge into 批量更新 关联更新 批量修改 关联修改

Oracle merge into 语句用法 Oracle merge into 批量更新 关联更新 批量修改 关联修改 一、概述 在开发任务中,遇到一个需求,同一批次的名单;根据一定的条件判断是否存在,若存在,则进行更新操作;若不存在&a…

ES6之Reflect详解

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

MySQL基础入门(二)

多表内容 一对多 这个内容是黑马的入门问题,可以带大家思考一下这个怎么设计 我们要知道一个岗位可以对应很多用户,而一个用户只能对应一个岗位,这就属于一对多的类型 那么我们需要怎么将他们进行关联呢? 现在我们可以通过一个…

Visual Transformer (ViT)模型详解

1 Vit简介 1.1 Vit的由来 ViT是2020年Google团队提出的将Transformer应用在图像分类的模型,虽然不是第一篇将transformer应用在视觉任务的论文,但是因为其模型“简单”且效果好,可扩展性强(scalable,模型越大效果越好…

strlen的自定义函数的三种实现方法

文章目录 一,概要二,题目三,方法1,方法一2,方法二3,方法三 四,总结 一,概要 在求字符串长度的时候我们会遇到求解字符串的长度,此时我们想到的是strlen,头文件…

如何跨系统构建docker镜像?

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 1. 前言 docker镜像有基于amd64系统的,也有基于arm64系统的。 前段时间用了一个在x86_64的centos7服务器上构建的i…

SpringBoot自动配置原理和自定义启动器

1、自动配置的原理 项目在加载上下文时,会根据SpringBootApplication注解运行。该注解中有一个CompoentScan注解,会扫描和加载当前启动类所在的目录,以及所有的子目录;还有一个是EnableAutoConfiguration注解,这个注解…

huggingface的tokenizer解读

文章目录 前言一、huggingface的tokenizer含义1、含义2、整体概括 二、加载lmsys/vicuna-7b-v1.5模型的tokenizer三、调用tokernizer方法四、字符串的tokens应用1、tokenizer应用2、tokenizer进行token分词(tokenizer.tokenize)3、tokens转模型识别ids(tokenizer.convert_token…

Centos7:Jenkins+gitlab+node项目启动(2)

Centos7:Jenkinsgitlabnode项目启动(1) Centos7:Jenkinsgitlabnode项目启动(1)-CSDN博客 Centos7:Jenkinsgitlabnode项目启动(2) Centos7:Jenkinsgitlabnode项目启动(2)-CSDN博客 Centos7:Jenkinsgitlabnode项目启…

数据结构【线性表篇】(三)

数据结构【线性表篇】(三) 文章目录 数据结构【线性表篇】(三)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件? 目录一、双链表二、循环链表三、静态链表 结语 前言 为什么突然想学算法了? > 用较为“官方…

回溯法求不等式的所有整数解

这份代码本来是用来解决这个问题的 但是&#xff0c;修改之后即可用来解决任意多个xi组成的满足不等式的整数解 这里用真代码而不是伪代码来表示 源代码&#xff1a; #include<iostream> using namespace std; const int N1010; int p,q,r,goal,n; int cnt,sum,MIN; i…

ES6之生成器(Generator)

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

挑战Python100题(9)

100+ Python challenging programming exercises 9 Question 81 Please write a program to randomly print a integer number between 7 and 15 inclusive. Hints: Use random.randrange() to a random integer in a given range. 请编写一个程序,随机打印一个介于7和15之间…

Java学习,一文掌握Java之SpringBoot框架学习文集(1)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

2021-06-25 51蛋骗鸡按键切合LED

缘由ISIS 7 Professional_有问必答-CSDN问答 #include "REG52.h" sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3; void main() {unsigned char Xd0,xz0,cs0;unsigned int wei0;P1255;while(1){if(K10&&Xd0){P10;while(K10);}if(K20&&…

【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于预训练ESPCN的轻量化图像超分辨率模型TPU部署方案

2023 CCF 大数据与计算智能大赛 《基于TPU平台实现超分辨率重建模型部署》 作品名&#xff1a;基于预训练ESPCN的轻量化图像超分辨率模型TPU部署方案 队伍名&#xff1a;Absofastlutely 蒋松儒 计算机科学与技术系 硕士 南京大学 中国-江苏 kahsoltqq.com 吕欢欢 计算…
最新文章