介绍PyTorch张量
介绍PyTorch张量
介绍PyTorch张量
PyTorch张量是我们在PyTorch中编程神经网络时将使用的数据结构。
在编程神经网络时,数据预处理通常是整个过程的第一步,数据预处理的一个目标是将原始输入数据转换为张量形式。
torch.Tensor类的实例
PyTorch张量是torch.Tensor Python类的实例。我们可以使用类构造函数创建一个torch.Tensor对象,如下所示:
> t = torch.Tensor()
> type(t)
torch.Tensor
这创建了一个空张量(没有数据的张量),但我们很快就会添加数据。
张量属性
首先,让我们看看一些张量属性。每个torch.Tensor都有这些属性:
-
torch.dtype -
torch.device -
torch.layout
查看我们的张量t,我们可以看到以下默认属性值:
> print(t.dtype)
> print(t.device)
> print(t.layout)
torch.float32
cpu
torch.strided
张量具有torch.dtype
dtype,在我们的例子中是torch.float32,指定了张量中包含的数据类型。张量包含统一(相同类型)的数值数据,类型如下:
| 数据类型 | dtype | CPU张量 | GPU张量 |
|---|---|---|---|
| 32位浮点数 | torch.float32 | torch.FloatTensor | torch.cuda.FloatTensor |
| 64位浮点数 | torch.float64 | torch.DoubleTensor | torch.cuda.DoubleTensor |
| 16位浮点数 | torch.float16 | torch.HalfTensor | torch.cuda.HalfTensor |
| 8位整数(无符号) | torch.uint8 | torch.ByteTensor | torch.cuda.ByteTensor |
| 8位整数(有符号) | torch.int8 | torch.CharTensor | torch.cuda.CharTensor |
| 16位整数(有符号) | torch.int16 | torch.ShortTensor | torch.cuda.ShortTensor |
| 32位整数(有符号) | torch.int32 | torch.IntTensor | torch.cuda.IntTensor |
| 64位整数(有符号) | torch.int64 | torch.LongTensor | torch.cuda.LongTensor |
注意每种类型都有CPU和GPU版本。关于张量数据类型的一点需要注意,张量之间的张量操作必须在具有相同数据类型的张量之间进行。然而,这个声明只适用于PyTorch版本低于1.3。有关详细信息,请参阅下面的_PyTorch张量类型提升_部分。
PyTorch张量类型提升
从PyTorch版本1.3开始,算术和比较操作可以执行混合类型操作,这些操作提升为共同的dtype。
下面的例子在版本1.2中是不允许的。然而,在版本1.3及以上,相同的代码返回一个dtype=torch.float32的张量。
torch.tensor([1], dtype=torch.int) +
torch.tensor([1], dtype=torch.float32)
有关更多详细信息,请参阅完整文档。
-
torch.result_type 提供函数以确定混合类型操作的结果 -
torch.can_cast 公开类型提升的转换规则 -
torch.promote_types 公开提升逻辑
张量具有torch.device
设备,在我们的例子中是cpu,指定了张量数据分配的设备(CPU或GPU)。这决定了给定张量的张量计算将在哪里执行。
PyTorch支持使用多个设备,它们使用索引指定:
> device = torch.device('cuda:0')
> device
device(type='cuda', index=0)
如果我们有这样的设备,我们可以通过将设备传递给张量的构造函数来在设备上创建张量。关于使用多个设备的一点需要注意,张量之间的张量操作必须在存在于同一设备上的张量之间进行。
使用多个设备通常是我们在成为更高级用户时会做的事情,所以现在不必担心。
张量具有torch.layout
布局,在我们的例子中是strided,指定了张量如何在内存中存储。要了解更多关于步幅的信息,请点击这里。
目前,这就是我们需要知道的全部。
从张量属性中提取的信息
作为神经网络程序员,我们需要意识到以下几点:
- 张量包含统一类型的数据(
dtype)。 - 张量之间的张量计算取决于
dtype和device。
现在,让我们看看在PyTorch中使用数据创建张量的常见方法。
使用数据创建张量
这些是在PyTorch中使用数据(类似数组)创建张量对象(torch.Tensor类的实例)的主要方法:
-
torch.Tensor(data) -
torch.tensor(data) -
torch.as_tensor(data) -
torch.from_numpy(data)
让我们看看这些选项。它们都接受某种形式的数据,并给我们一个torch.Tensor类的实例。有时,当有多种方法可以实现相同的结果时,事情可能会变得混乱,所以让我们来分解一下。
我们将首先使用每个选项创建一个张量,看看我们得到了什么。我们将首先创建一些数据。
我们可以使用Python列表或序列,但numpy.ndarray将是更常见的选项,所以我们将使用一个numpy.ndarray,如下所示:
> data = np.array([1,2,3])
> type(data)
numpy.ndarray
这给我们提供了一个类型为numpy.ndarray的简单数据。
现在,让我们使用这些选项1-4创建我们的张量,并看看我们得到了什么:
> o1 = torch.Tensor(data)
> o2 = torch.tensor(data)
> o3 = torch.as_tensor(data)
> o4 = torch.from_numpy(data)> print(o1)
> print(o2)
> print(o3)
> print(o4)
tensor([1., 2., 3.])
tensor([1, 2, 3], dtype=torch.int32)
tensor([1, 2, 3], dtype=torch.int32)
tensor([1, 2, 3], dtype=torch.int32)
所有选项(o1,o2,o3,o4)似乎都产生了相同的张量,除了第一个。第一个选项(o1)在数字后面有点,表示这些数字是float,而接下来的三个选项类型为int32。
// Python代码示例,说明我们的意思> type(2.)
float> type(2)
int
在下一篇文章中,我们将更深入地探讨这种差异以及其他一些重要的差异,这些差异隐藏在幕后。
下一篇文章的讨论将使我们能够看到这些选项中哪一个最适合创建张量。目前,让我们看看一些无需任何数据即可创建张量的创建选项。
无需数据的创建选项
以下是一些其他可用的创建选项。
我们有torch.eye()函数,它返回一个2-D张量,对角线上是1,其他地方是0。eye()这个名字与单位矩阵的概念有关,单位矩阵是一个方阵,主对角线上是1,其他地方都是0。
> print(torch.eye(2))
tensor([[1., 0.],[0., 1.]
])
我们有torch.zeros()函数,它创建一个指定形状参数的零张量。
> print(torch.zeros([2,2]))
tensor([[0., 0.],[0., 0.]
])
同样,我们有torch.ones()函数,它创建一个1的张量。
> print(torch.ones([2,2]))
tensor([[1., 1.],[1., 1.]
])
我们还有torch.rand()函数,它创建一个指定参数形状的张量,其值是随机的。
> print(torch.rand([2,2]))
tensor([[0.0465, 0.4557],[0.6596, 0.0941]
])
这是不需要数据的可用创建函数的一小部分。查看PyTorch文档以获取完整列表。
我希望现在你对如何使用PyTorch从数据以及不需要数据的内置函数创建张量有了很好的理解。如果我们使用numpy.ndarray,这个任务将变得轻而易举,所以如果你已经熟悉NumPy,那么恭喜你。
相关文章:
介绍PyTorch张量
介绍PyTorch张量 介绍PyTorch张量 PyTorch张量是我们在PyTorch中编程神经网络时将使用的数据结构。 在编程神经网络时,数据预处理通常是整个过程的第一步,数据预处理的一个目标是将原始输入数据转换为张量形式。 torch.Tensor类的实例 PyTorch张量…...
Vision Transformer (ViT)原理
Vision Transformer (ViT)原理 flyfish Transformer缺乏卷积神经网络(CNNs)的归纳偏差(inductive biases),比如平移不变性和局部受限的感受野。不变性意味着即使实体entity(即对象)的外观或位…...
移动云自研云原生数据库入围国采!
近日,中央国家机关2024年度事务型数据库软件框架协议联合征集采购项目产品名单正式公布,移动云自主研发的云原生数据库产品顺利入围。这一成就不仅彰显了移动云在数据库领域深耕多年造就的领先技术优势,更标志着国家权威评审机构对移动云在数…...
Unity中对象池的使用(用一个简单粗暴的例子)
问题描述:Unity在创建和销毁对象的时候是很消耗性能的,所以我们在销毁一个对象的时候,可以不用Destroy,而是将这个物体隐藏后放到回收池里面,当再次需要的时候如果回收池里面有之前回收的对象,就直接拿来用…...
linux命令行连接Postgresql常用命令
1.linux系统命令行连接数据库命令 psql -h hostname -p port -U username -d databasename -h 主机名或IP地址 -p 端口 -U 用户名 -d 连接的数据库 2.查询数据库表命令 select version() #查看版本号 \dg #查看用户 \l #查询数据库 \c mydb #切换…...
每日一题-单链表排序
为了对给定的单链表按升序排序,我们可以考虑以下解决方法: 思路 归并排序(Merge Sort):由于归并排序的时间复杂度为 O ( n log n ) O(n \log n) O(nlogn),并且归并排序不需要额外的空间(空…...
webpack04服务器配置
webpack配置 entryoutput filenamepathpublicPath 。。 打包引入的基本路径,,,比如引入一个bundle.js,。引用之后的路径就是 publicPathfilename -devServer:static : 静态文件的位置。。。hostportopencompress : 静态资源是否用gzip压缩hi…...
JDK下载安装配置
一.JDK安装配置。 1.安装注意路径,其他直接下一步。 2.配置。 下接第4步. 或者 代码复制: JAVA_HOME D:\Program Files\Java\jdk1.8.0_91 %JAVA_HOME%\bin 或者直接配置 D:\Program Files\Java\jdk1.8.0_91\bin 3.验证(CMD)。 java javac java -version javac -version 二.下…...
30_Redis哨兵模式
在Redis主从复制模式中,因为系统不具备自动恢复的功能,所以当主服务器(master)宕机后,需要手动把一台从服务器(slave)切换为主服务器。在这个过程中,不仅需要人为干预,而且还会造成一段时间内服务器处于不可用状态,同时数据安全性也得不到保障,因此主从模式的可用性…...
NLP三大特征抽取器:CNN、RNN与Transformer全面解析
引言 自然语言处理(NLP)领域的快速发展离不开深度学习技术的推动。随着应用需求的不断增加,如何高效地从文本中抽取特征成为NLP研究中的核心问题。深度学习中三大主要特征抽取器——卷积神经网络(Convolutional Neural Network, …...
《使用 YOLOV8 和 KerasCV 进行高效目标检测》
《使用 YOLOV8 和 KerasCV 进行高效目标检测》 作者:Gitesh Chawda创建日期:2023/06/26最后修改时间:2023/06/26描述:使用 KerasCV 训练自定义 YOLOV8 对象检测模型。 (i) 此示例使用 Keras 2 在 Colab 中…...
从MySQL迁移到PostgreSQL的完整指南
1.引言 在现代数据库管理中,选择合适的数据库系统对业务的成功至关重要。随着企业数据量的增长和对性能要求的提高,许多公司开始考虑从MySQL迁移到PostgreSQL。这一迁移的主要原因包括以下几个方面: 1.1 性能和扩展性 PostgreSQL以其高性能…...
服务器一次性部署One API + ChatGPT-Next-Web
服务器一次性部署One API ChatGPT-Next-Web One API ChatGPT-Next-Web 介绍One APIChatGPT-Next-Web docker-compose 部署One API ChatGPT-Next-WebOpen API docker-compose 配置ChatGPT-Next-Web docker-compose 配置docker-compose 启动容器 后续配置 同步发布在个人笔记服…...
51单片机 和 STM32 的烧录方式和通信协议的区别
51单片机 和 STM32 的烧录方式和通信协议的区别 1. 为什么51单片机需要额外的软件(如ISP)? (1)51单片机的烧录方式 ISP(In-System Programming): 51单片机通常通过 串口(…...
(STM32笔记)十二、DMA的基础知识与用法 第二部分
我用的是正点的STM32F103来进行学习,板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话,用的也是这个板子和教程。 DMA的基础知识与用法 二、DMA传输设置1、数据来源与数据去向外设到存储器存储器到外设存储器到存储器 2、每次传输大小3、传…...
【优选算法篇】:模拟算法的力量--解决复杂问题的新视角
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:优选算法篇–CSDN博客 文章目录 一.模拟算法二.例题1.替换所有的问号2.提莫攻击3.外观数列4…...
探秘 JMeter (Interleave Controller)交错控制器:解锁性能测试的隐藏密码
嘿,小伙伴们!今天咱们要把 JMeter 里超厉害的 Interleave Controller(交错控制器)研究个透,让你从新手直接进阶成高手,轻松拿捏各种性能测试难题! 一、Interleave Controller 深度剖析 所属家族…...
脚本化挂在物理盘、nfs、yum、pg数据库、nginx(已上传脚本)
文章目录 前言一、什么是脚本化安装二、使用步骤1.物理磁盘脚本挂载(离线)2.yum脚本化安装(离线)3.nfs脚本化安装(离线)4.pg数据库脚本化安装(离线)5.nginx脚本化安装(离…...
ESP嵌入式开发环境安装
前期准备,虚拟机,ios镜像,VSCode。 centOS8:centos安装包下载_开源镜像站-阿里云 虚拟机:vmware VSCode:Visual Studio Code - Code Editing. Redefined 如何安装镜像自行查找 完成以上环境后进行一下操…...
Elasticsearch入门学习
Elasticsearch是什么 Elasticsearch 是一个基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展的数据存储和矢量数据库。 它针对生产规模工作负载的速度和相关性进行了优化。 使用 Elasticsearch 近乎实时地搜索、索引、存储和分析各种形状和大小的数据。 特点 分布式&a…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
