介绍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…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...

【Java多线程从青铜到王者】单例设计模式(八)
wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒…...