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.mzph.cn/news/589274.shtml

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

相关文章

基于OpenCv的车道检测

项目背景和步骤 车道检测是自动驾驶领域不可或缺的一环 具体步骤如下: 一、将图像灰度化,并进行适度的高斯滤波,剔除干扰 二、利用Canny边缘检测,检测出车道和其它物体的边缘 三、使用ROI区域截取,截取需要的部分&a…

AI与数字化映像:颜值开端,功能至上_光点科技

在人工智能的浪潮中,AI数字人的兴起正成为一个不可忽视的现象。随着ChatGPT等生成式AI算法的进步,AIGC(人工智能生成内容)的应用呈现出爆发性增长,不仅在技术圈引起广泛关注,也为元宇宙及其相关产业链带来了…

小白入门java基础-反射详解

一:介绍 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。 Java 可运行于多个平台,如 Windows, Mac OS 及其他多种 UNIX 版本的系统。Java语言编写的程序,在一次编译后,可以在多个系统平台上运行。 主…

Spring Boot笔记1

1. SpringBoot简介 1.1. 原有Spring优缺点分析 1.1.1. Spring的优点分析 Spring是Java企业版(Java Enterprise Edition,javeEE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业…

Bmp2Png是什么工具?好用吗?

Bmp2Png是什么工具?好用吗? 批量BMP图片转为PNG透明图片,去掉BMP黑色背景,压缩导出png图片V1.1前段时间上传了一款bmp转png并去黑底的demo软件,非常受欢迎, 上一版本地址:批量BMP图片转为PNG…

计算机网络 (期末救命版)

文章目录 Ⅰ 网络概述1. 互联网概述与组成2. 计算机网络的类别3. 计算机网络的性能指标4. 计算机网络体系结构 Ⅱ 物理层1. 物理层的任务2. 信道复用技术 Ⅲ 数据链路层1. 点对点信道2. 基本问题3. 点对点协议 PPP4. 使用广播信道的数据链路层 Ⅳ 网络层1. 网络层的服务2. 网际…

解算人生--写于2023跨年之夜

最近买了一本书,书名叫《计算》 读了部分内容,虽然理解上还需要再下下功夫,但是直观的感觉冲击还是挺大的,最明显的就是表面与本质的把握。大家可能都有这样一种感觉,初步涉足某一领域时,开始我们都会被大量…

github使用技巧(经验篇)

相关经验 指定代码范围并高亮显示 例如,指定nn_ops.py文件2612-L2686行的代码:https://github.com/tensorflow/tensorflow/blob/v2.14.0/tensorflow/python/ops/nn_ops.py#L2612-L2686 FAQ Q:github网页打不开? 【github加载不…

WeNet语音识别调用通义千问

WeNet语音识别调用通义千问 WeNet语音识别对通义千问(Qwen-72B-Chat Bot)调用,首先通过WeNet将用户的语音输入转录为文本,然后将此文本输入通用问答模型以获取答案。 本人原创作品,体验一下 连续对话 WeNet语音识别…

一起玩儿物联网人工智能小车(ESP32)——22. 用ESP32的LED PWM控制器给TT马达调速(C MicroPython)

新年快乐! 2024,我们一起玩儿! 摘要:本文主要介绍如何使用Mixly实现PWM波形的输出。 下面就先用Mixly实现PWM波形的输出。首先打开Mixly软件,这次还是先使用C语言来实现。如果你有示波器,或者逻辑分析仪&a…

基于SSM的牙科诊所管理系统

基于SSM的牙科诊所管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 前台主页 后台界面 摘要 随着社会的不断发展和人们生活水平的提高,牙…

C++面试宝典第13题:计算餐厅账单

题目 假如你是一家餐厅的收银员,需要编写一个程序来计算顾客的账单。程序应该能够接受顾客点的菜品和数量,并根据菜品的单价计算出总价。另外,程序还应该能够处理折扣和优惠券,并输出最终的账单金额。 解析 这道题主要考察应聘者使用面向对象的设计方法来解决实际问题的能力…

【网络面试(3)】浏览器委托协议栈完成消息的收发

前面的博客中,提到过很多次,浏览器作为应用程序,本身是不具备向网络中发送网络请求的能力,要委托操作系统的内核协议栈来完成。协议栈再调用网卡驱动,通过网卡将请求消息发送出去,本篇博客就来探讨一下这个…

UG NX二次开发(C#)-Ufun和NXOpen混合编程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、Ufun函数3、 NXOpen4、混合编程实现1、前言 在UG NX二次开发过程中,采用Ufun功能比较简单,能用比较少的代码实现我们需要的功能,但是ufun函数的功能不是很强大,尤其随着UG NX的版本…

LeetCode刷题--- 不同路径 III

个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言:这个专栏主要讲述递…

基于 LangChain + GLM搭建知识本地库

一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 受GanymedeNil的项目document.ai和AlexZhangji创建的ChatGLM-6B Pull Request启发,建立了全流程可使用开源模…

Python中JSON模块的使用

1 JSON简介 JSON是JavaScript Object Notation即Javascript对象简谱的缩写。JSON是一种轻量级的数据交换格式,JSON数据是由键值对组成的结构,与Python中的字典类似,由尖括号包围的键值对组成,键和值的类型可以是字符串、数字、布…

【华为机试】2023年真题B卷(python)-滑动窗口最大值

一、题目 题目描述: 有一个N个整数的数组,和一个长度为M的窗口,窗口从数组内的第一个数开始滑动直到窗口不能滑动为止, 每次窗口滑动产生一个窗口和(窗口内所有数的和),求窗口滑动产生的所有窗口…

电缆厂 3D 可视化管控系统 | 图扑数字孪生

图扑软件(Hightopo)专注于 Web 的 2D&3D 可视化,自主研发 2D&3D 图形渲染引擎、数据孪生应用开发平台和开发工具,广泛应用于 2D&3D 可视化、工业组态与数字孪生领域,图扑软件为工业物联网、楼宇、场馆、园区、数据中心、工厂、电…

shell编程一

shell 定义 Shell 也是一种程序设计语言,它有变量,关键字,各种控制语句,有自己的语法结构,利用shell程序设计语 可以编写功能强、代码简短的程序 #! Shebang 定义解释器 shell的分类和切换 # cat /etc/shells /bin/sh…