2-1 张量数据结构

2023-09-13 20:00:26

张量概念

张量是什么?
单个元素叫标量(scalar),一个序列叫向量(vector),多个序列组成的平面叫矩阵(matrix),多个平面组成的立方体叫张量(tensor)。在深度学习中,标量、向量、矩阵、高维矩阵都统称为张量。在pytorch中,一个Tensor内部包含数据和导数两部分。

Pytorch的基本数据结构是张量Tensor。张量即多维数组。Pytorch的张量和numpy中的array很类似。
在Pytorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码。最重要的是,数据转化为张量可以方便在GPU上运行,这样运行速度可以大大加快。

一、张量的数据类型(如何创建张量)

torch.float64(torch.double),
torch.float32(torch.float), 最常用
torch.float16,
torch.int64(torch.long),
torch.int32(torch.int),
torch.int16,
torch.int8,
torch.uint8,
torch.bool
可以直接使用指定类型
image.png
**也使用特定函数创建:**torch.IntTensor()、torch.tensor()(等价于torch.FloatTensor)、torch.BoolTensor()
注意:
torch.IntTensor(3)创建的张量并不是 tensor(3)或者tensor([3]),而是随机的三个整数
image.png
image.png
torch.Tensor()参数:
data:data的数据类型可以是列表list、元组tuple、numpy数组ndarray、纯量scalar(又叫标量)和其他的一些数据类型。
dtype:该参数可选参数,默认为None,如果不进行设置,生成的Tensor数据类型会拷贝data中传入的参数的数据类型,比如data中的数据类型为float,则默认会生成数据类型为torch.FloatTensor的Tensor。
device:该参数可选参数,默认为None,如果不进行设置,会在当前的设备上为生成的Tensor分配内存。
requires_grad:该参数为可选参数,默认为False,在为False的情况下,创建的Tensor不能进行梯度运算,改为True时,则可以计算梯度。
pin_memory:该参数为可选参数,默认为False,如果设置为True,则在固定内存中分配当前Tensor,不过只适用于CPU中的Tensor。

不同类型转换:
image.png
注意区分 torch.tensor 和 torch.Tensor:
image.png
image.png
所以说 torch.Tensor 等价于 torch.FloatTensor

二、张量维度

不同类型的数据可以用不同维度(dimension)的张量来表示。
标量为0维张量,向量为1维张量,矩阵为2维张量。
彩色图像有rgb三个通道,可以表示为3维张量。
视频还有时间维,可以表示为4维张量。
可以简单地总结为:有几层中括号,就是多少维的张量。

三、张量尺寸

可以使用 shape属性或者 size()方法查看张量在每一维的长度.
可以使用view方法改变张量的尺寸。
如果view方法改变尺寸失败,可以使用reshape方法.
image.png

四、张量和numpy数组

可以用numpy方法从Tensor得到numpy数组,也可以用torch.from_numpy从numpy数组得到Tensor。
这两种方法关联的Tensor和numpy数组是共享数据内存的。
如果改变其中一个,另外一个的值也会发生改变。
如果有需要,可以用张量的clone方法拷贝张量,中断这种关联。
此外,还可以使用item方法从标量张量得到对应的Python数值。
使用tolist方法从张量得到对应的Python数值列表。
tensor.add_(1) #给 tensor增加1,arr也随之改变 等价于: torch.add(tensor,1,out = tensor)

#torch.from_numpy函数从numpy数组得到Tensor
arr = np.zeros(3) # 1*3 然后元素都是0
tensor = torch.from_numpy(arr)

# numpy方法从Tensor得到numpy数组
tensor = torch.zeros(3)
arr = tensor.numpy()

参考:https://github.com/lyhue1991/eat_pytorch_in_20_days

更多推荐

性能测试之压力测试

文章目录一.基本介绍二.性能指标三.下载安装JMeter1.下载安装包2.启动JMeter四.使用JMeter1.模拟用户请求2.填写测试地址3.接收测试结果4.结果解释一.基本介绍压力测试考察当前软硬件条件下系统所能承受的最大负荷并找到系统瓶颈所在。压测是为了系统在线上的处理能力和稳定性维持在一个范围内。压力测试可以

Mysql——压缩包方式安装教程

一.Mysql压缩包下载方式zip版(5.7及8.0)的下载需到官方网站下载,不同版本对应能安装在不同的操作系统下,本次介绍的是mysql-8.0.30-winx64在win10下的安装方式。下载网址:MySQL::DownloadMySQLCommunityServer二.Mysql的安装流程1.下载压缩包至本机目录

DBAPI插件开发指南

DBAPI插件开发指南插件市场您可以去插件市场下载插件插件的作用DBAPI的插件分4类,分别是数据转换插件、缓存插件、告警插件、全局数据转化插件缓存插件对执行器结果进行缓存,比如SQL执行器,对查询类SQL,sql查询结果进行缓存,这样避免频繁的查询数据库,对数据库造成压力。缓存逻辑由用户自己编写,用户可以缓存到red

【linux基础(七)】Linux中的开发工具(下)--make/makefile和git

💓博主CSDN主页:杭电码农-NEO💓⏩专栏分类:Linux从入门到开通⏪🚚代码仓库:NEO的学习日记🚚🌹关注我🫵带你学更多操作系统知识🔝🔝Linux中的开发工具1.前言2.make和makefile介绍3.make和makefile再理解4.伪目标的定义以及性质5.文件的三个属性6.makefile推

Mac 电脑查看本地maven,及私有仓库的搭建与使用【nexus的配置与使用】

查看本地maven查看状态如果要查看本地maven,使用命令行:mvnhelp:effective-settings如下如localRepository标签nexus下载官网地址解压后如下图启动服务器/停止服务器bin目录下执行命令:./nexusstart如下图表面启动成功此时浏览器访问:http://localho

DevExpress WinForms图表组件 - 直观的数据信息呈现新方式!(一)

凭借界面控件DevExpressWinForms全面的2D和3D图表类型的集合,DevExpressWinForms的图表控件设计大大简化了开发者直观地向最终用户呈现信息的方式。DevExpressWinForms有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。同时能完美构建流畅、

MR混合现实情景实训教学

MR混合现实技术是一种将虚拟现实与现实场景相融合的创新技术,可以广泛应用于各个领域。其中,混合现实情景实训教学是MR技术的一个重要应用场景。在医学专业方面,医学生常常需要通过实际操作来提升自己的技能水平,然而传统的实训方式存在着一些问题,如实际设备的限制和真实情况的局限性。采用MR混合现实情景实训教学,学生可以通过佩戴

Stream流编程

目录获取流Stream流的常用方法:count.filter方法:forEach方法limit方法map方法skip方法concat方法收集Stream流流格式Stream<T>filter(Predicate<?superT>predicate);----->参数:publicinterfacePredicate<T

【Apollo】开启Apollo之旅:让自动驾驶如此简单

前言Apollo是百度公司推出的自动驾驶平台。它是一个综合性的自动驾驶解决方案,提供了包括感知、决策、规划和控制等核心功能,以及地图、定位、仿真、数据管理等配套工具。文章目录前言Apollo的发展历程Apollo8.0新特性软件包管理感知框架工具链小结云端体验软件包安装总结活动活动介绍学习形式课程安排活动奖励报名方式A

Docker部署单点Elasticsearch与Kibana

一、创建网络因为需要部署kibana容器,因此需要让es和kibana容器互联。这里创建一个网络:dockernetworkcreatees-net#创建一个网络名称为:es-net二、拉取并加载镜像方式一dockerpullelasticsearch:7.12.1版本为elasticsearch的7.12.1版本的镜

Jenkins学习笔记3

git+github+jenkins:架构图:说明:jenkins知道github有更新了,就pull进行构建build,编译、自动化测试。然后部署到应用服务器。mavenjava的项目构建工具。在开发者电脑上创建空密码密钥对。[root@git-developer~]#gitclonegit@github.com:c

热文推荐