Pytorch 基础之张量数据类型

news2024/9/24 16:35:06

学习之前:先了解 Tensor(张量)

官方文档的解释是:

张量如同数组和矩阵一样, 是一种特殊的数据结构。在PyTorch中, 神经网络的输入、输出以及网络的参数等数据, 都是使用张量来进行描述。

说白了就是一种数据结构

基本数据类型

Java 与 Pytorch 基本数据类型类比:

JavaPytorch (所有都是 Tensor)
byteByteTensor of size()
shortShortTensor of size()
charCharensor of size()
intIntTensor of size()
longLongTensor of size()
floatFloatTensor of size()
doubleDoubleTensor of size()

Pytorch 并没有 string 这种类型,但可以通过 one-hot 编码,以及一些内置的处理库,如 Word2vec 来表示。这块先有个概念,了解即可。

数组的表示形如:IntTensor of size[d1, d2, ...],FloatTensor of size[d1, d2, ...] ...

Pytorch 具体的类型如下图:

Pytorch 数据类型在 CPU 和 GPU 运行上有些差别,在 GPU 注意加上 cuda

类型检查

Pytorch 提供了以下几种类型检查与判断的方法,举例来说:

import torch
x=torch.rand(5,3)   // 随机生成一个 5 行 4 列的 tensor 变量
print(x.type())
print(type(x))
result = isinstance(x, torch.FloatTensor)
print(result)

// 执行结果
torch.FloatTensor
<class 'torch.Tensor'>
True

执行结果如下:

方法结果
x.type()torch.FloatTensor,返回当前这个变量具体的数据类型
type(x)<class 'torch.Tensor'>,返回当前这个变量的类型
isinstance(x, torch.FloatTensor)True,数据类型比较,这里改成 FloatTensor 的父类 torch.Tensor 也是返回 True

如下图:Tensor 的实现类有以下好几种。

维度(dimension)

Tensor 的维度,可通过以下方法来计算:

# 创建个具体数据的 Tensor dim = 0
a = torch.tensor(1)     
print(a.shape)        
print(a.size())
print(a.dim())
print(len(a.shape))
print(len(a.size()))


//输出结果:
torch.Size([])
torch.Size([])
0
0
0

shape 属性:是描述 Tensor 的形状

size() 方法:和 shape 属性一样,只是这是方法

dim() 方法:直接获取维度的数值,也可通过 len(a.shape) 和 len(a.size()) 方法来获取

维度的理解一定是要结合实际的意义来,这样会更容易理解。

零维度 Tensor

如上代码,就是零维度,实际使用场景:loss 损失函数,返回的就是个 0 维标量,表示数据大小

Pytorch 中需要表示数据大小的,都是使用零维度

1 维度 Tensor

b = torch.tensor([5, 4])
print(b)
print(b.shape)
print(b.size())
print(b.dim())

//输出结果
tensor([5, 4])
torch.Size([2])
torch.Size([2])
1

可以理解为是一个 1 行 2 列的矩阵。

b.size() 返回的 torch.Size([2]),表示的就是只有 1 行 2 列的结构

实际使用的场景是:Bias(偏置函数)、线性输入

2 维度 Tensor

c = torch.rand(2, 3)
print(c)
print(c.size())
print(c.size(0))
print(c.size(1))
print(c.dim())

//输出结果
tensor([[0.5755, 0.1844, 0.1174],
        [0.8228, 0.8758, 0.1008]])
torch.Size([2, 3])
2
3
2

可以理解为一个 2 行 3 列的矩阵。

c.size() 返回的 torch.Size([2, 3]) 描述的是矩阵结构,行数为 2,列数为 3

c.size(0):返回的是行数 2

c.size(1):返回的是列数 3

实际使用场景:线性输入组的概念,比如用 dimension 为 1 的 Tensor 表示一张图片,要输入 8 张,则就需要再增加一个维度。

3 维度 Tensor

d = torch.rand(2, 3, 4)
print(d)
print(d.size())
print(d.size(0))
print(d.size(1))
print(d.size(2))
print(d.dim())

//输出结果
tensor([[[0.9375, 0.6131, 0.5574, 0.2307],
         [0.4352, 0.2731, 0.5670, 0.2216],
         [0.0959, 0.8864, 0.7924, 0.0760]],

        [[0.9787, 0.2835, 0.2164, 0.3175],
         [0.8904, 0.8363, 0.0011, 0.3942],
         [0.6285, 0.5877, 0.5401, 0.2004]]])
torch.Size([2, 3, 4])
2
3
4
3

可以理解为 2 组 3 行 4 列的矩阵构成的数据。

d.size(0):返回的是组数 2

d.size(1):返回的是行数 3

d.size(2):返回的是列数 4

实际使用场景: 比如用一个 dimension 长度为 1 的 Tensor 表示图片的高度,用另一个 dimension 长度为 1 的 Tensor 表示图片的宽度,如果要输入 10 张图片则需要再增加一个维度,也就是 3 维的 Tensor 表示这个输入。在 RNN (循环神经网络) 处理中有更广泛应用。

4 维度 Tensor

e = torch.rand(2, 3, 28, 28)
print(e)
print(e.size())
print(e.size(0))
print(e.size(1))
print(e.size(2))
print(e.size(3))
print(e.dim())

//输出结果
tensor([[[[0.7386, 0.8259, 0.6421, 0.5180, 0.7754],
          [0.2118, 0.0453, 0.4092, 0.2339, 0.7938],
          [0.2132, 0.0554, 0.0305, 0.3132, 0.8126],
          [0.2169, 0.2510, 0.5233, 0.1525, 0.4049],
          [0.5695, 0.8084, 0.4958, 0.6022, 0.6873]],

         [[0.8591, 0.4062, 0.0522, 0.4481, 0.8709],
          [0.1667, 0.1246, 0.0640, 0.3585, 0.0226],
          [0.7756, 0.3169, 0.1678, 0.3884, 0.3878],
          [0.6382, 0.8963, 0.3272, 0.9765, 0.6208],
          [0.1300, 0.4894, 0.0875, 0.5357, 0.5581]],

         [[0.9978, 0.4991, 0.8405, 0.8512, 0.8052],
          [0.3975, 0.8562, 0.1375, 0.0642, 0.0928],
          [0.2272, 0.7209, 0.8362, 0.3370, 0.7584],
          [0.9186, 0.0423, 0.5342, 0.6597, 0.8330],
          [0.2812, 0.3573, 0.2112, 0.7046, 0.8038]]],


        [[[0.0577, 0.9690, 0.1507, 0.8940, 0.4517],
          [0.8458, 0.2516, 0.3659, 0.3188, 0.6680],
          [0.0421, 0.0674, 0.8306, 0.2685, 0.3755],
          [0.5505, 0.9351, 0.5172, 0.6399, 0.0379],
          [0.3950, 0.6902, 0.6320, 0.6701, 0.1980]],

         [[0.7649, 0.6655, 0.4616, 0.4521, 0.9183],
          [0.4430, 0.8904, 0.7241, 0.6998, 0.3434],
          [0.8955, 0.8490, 0.1604, 0.6503, 0.5091],
          [0.5581, 0.9493, 0.6065, 0.7257, 0.1195],
          [0.2835, 0.5829, 0.5373, 0.2529, 0.6760]],

         [[0.8280, 0.6496, 0.8250, 0.9196, 0.3306],
          [0.0847, 0.9219, 0.3239, 0.7554, 0.3148],
          [0.2311, 0.5712, 0.5821, 0.8725, 0.7012],
          [0.9260, 0.8914, 0.4068, 0.7549, 0.6963],
          [0.7220, 0.2854, 0.0995, 0.9733, 0.9665]]]])
torch.Size([2, 3, 5, 5])
2
3
5
5
4

可以理解为 2 组 3 块  5 行 5 列的矩阵构成的数据。

e.size(0):返回的是组数 2

e.size(1):返回的是块数 3

e.size(2):返回的是行数 5

e.size(3):返回的是列数 5

实际应用场景:图片的处理,比如要输入 2 张由 3 个颜色通道组成的,高为 5 个像素,宽为 5 个像素。在 CNN(卷积神经网络)中应用更为广泛。

以上是对 Pytorch 的 Tensor 张量数据类型进行了一些简单的介绍,有不足之处,欢迎一起探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/355086.html

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

相关文章

Python可以解码吗,解码打码是如何实现的

前言 咳咳&#xff0c;进来的铁汁都是抱着学习的心态进来看的吧&#xff0c;咱今天不讲解解码&#xff0c;咱来说说python如何来实现打码功能~ 这一个个进来的 都是标题党吧哈哈哈 有兴趣的可以继续看看哦 最近重温了一档综艺节目 至于叫什么 这里就不细说了 老是看着看着就…

【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】

【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】1、概述2、实验环境3、参考资料-致谢4、自我提升实验效果视频演示5、代码练习-学习后拆解-实验步骤&#xff08;1&#xff09;头文件部分-"mwaveview.h"&#xff08;2&#xff09;cpp文件部分-"mwav…

UDP数据报套接字编程

DatagramSocket API DatagramSocket 是UDP Socket&#xff0c;用于发送和接收UDP数据报。 DatagramSocket 构造方法&#xff1a; DatagramSocket 方法&#xff1a; DatagramPacket API DatagramPacket是UDP Socket发送和接收的数据报。 DatagramPacket 构造方法&#xff…

本地生成动漫风格 AI 绘画 图像|Stable Diffusion WebUI 的安装和局域网部署教程

Stable Diffusion WebUI 的安装和部署教程1. 简介2. 安装环境2.1 Windows2.2 Linux3. 运行4. 模型下载链接5. 局域网部署5.1 Windows5.2 Linux6. 其他资源1. 简介 先放一张WebUI的图片生成效果图&#xff0c;以给大家学习的动力 &#xff1a;&#xff09; 怎么样&#xff0c;…

浅析SAS协议(1):基本介绍

文章目录概述SAS协议发展历程SAS技术特性SAS设备拓扑SAS phySAS地址SAS设备类型SAS协议分层参考链接概述 SAS&#xff0c;全称Serial Attached SCSI&#xff0c;即串行连结SCSI&#xff0c;是一种采用了串行总线的高速互连技术。通过物理上使用串行总线连结&#xff0c;在链路…

用一行Python代码,为图片上水印版权!

今天一个朋友跟我吐槽&#xff1a;前段时间&#xff0c;我辛辛苦苦整理的一份XX攻略&#xff0c;分享给自己的一些朋友&#xff0c;结果今天看到有人堂而皇之地拿着这份攻略图片去引流&#xff0c;并声称是自己整理的&#xff0c;真是岂有此理&#xff01;他自己总结吃一堑长一…

超低成本DDoS攻击来袭,看WAF如何绝地防护

一、DDoS攻击&#xff0c;不止于网络传输层 网络世界里为人们所熟知的DDoS攻击&#xff0c;多数是通过对带宽或网络计算资源的持续、大量消耗&#xff0c;最终导致目标网络与业务的瘫痪&#xff1b;这类DDOS攻击&#xff0c; 工作在OSI模型的网络层与传输层&#xff0c;利用协…

【MyBatis】源码学习 03 - 类型处理器 TypeHandler

文章目录前言参考目录学习笔记1、type 包中类的归类总结2、类型处理器2.1、TypeReference 类3、类型注册表3.1、TypeHandlerRegistry#getTypeHandler前言 本文内容对应的是书本第 8 章的内容&#xff0c;主要是关于类型处理器 TypeHandler 的学习。 这一章节的学习有些地方理…

Java爬虫——WebMagic案例

抓取51Job的招聘信息一&#xff0c; Scheduler组件在解析页面的时候&#xff0c;很可能会解析出相同的url地址(例如商品标题和商品图片超链接&#xff0c;而且url一样)&#xff0c;如果不进行处理&#xff0c;同样的url会解析处理多次&#xff0c;浪费资源。所以我们需要有一个…

【Unity3d】Unity与Android之间通信

在unity开发或者sdk开发经常遇到unity与移动端原生层之间进行通信&#xff0c;这里把它们之间通信做一个整理。 关于Unity与iOS之间通信&#xff0c;参考【Unity3d】Unity与iOS之间通信 Unity(c#)调用Android (一)、编写Java代码 实际上&#xff0c;任何已经存在的Java代码…

【webpack5】一些常见优化配置及原理介绍(二)

这里写目录标题介绍sourcemap定位报错热模块替换&#xff08;或热替换&#xff0c;HMR&#xff09;oneOf精准解析指定或排除编译开启缓存多进程打包移除未引用代码配置babel&#xff0c;减小代码体积代码分割&#xff08;Code Split&#xff09;介绍预获取/预加载(prefetch/pre…

HydroD 实用教程(四)水动力模型

目 录一、前言二、Hydro Properties2.1 Compartment Properties2.2 Rudder and Thruster2.3 Wind Properties三、Hydro Structure3.1 Load Cross Sections四、Loading Conditions4.1 Mass Model4.2 Second Order Surface Model4.3 Wadam Offbody Points4.4 Additional Matrices…

Redis的常见操作和Session的持久化

安装Redis使用yum命令&#xff0c;直接将redis安装到linux服务器&#xff1a;yum -y install redis启动redis使用以下命令&#xff0c;以后台运行方式启动redis&#xff1a;redis -server /etc/redis.conf &操作redis使用以下命令启动redis客户端&#xff1a;redis-cli设置…

vscode连接服务器(腾讯云)

文章目录1. vscode远程总是报错2. vscode能连上腾讯云但密码不对或者登录后不能打开文件或文件夹1. vscode远程总是报错 报错如图所示 Could not establish connection to *** 过程试图写入的管道不存在。 在百度、csdn找了好久都是说删掉.ssh文件下的某个文件但我压根没有&a…

使用 nutjs实现前端RPA需求

nutjs 相关概念 nut.js 是 Node.js 的桌面自动化框架&#xff0c;我们可以使用 js / ts 来控制鼠标和键盘&#xff0c;来模拟人的操作完成一系列动作。它主要分为以下三块内容&#xff1a; KeyboardMouseScreen Keyboard 常用 API type: 它允许我们输入 键 或 字符串&#…

linux013之文件和目录的权限管理

用户、组、文件目录的关系&#xff1a; 简介&#xff1a;用户和组关联&#xff0c;组合文件目录关联&#xff0c;这样就实现了用户对文件的权限管理。首先来看一下&#xff0c;一个文件或目录的权限是怎么查看的&#xff0c;ls -l&#xff0c; 如下&#xff0c;这个信息怎么看呢…

71. Python 库与模块

71. 库与模块 文章目录71. 库与模块1. Python 就是一个解释器2. 什么模块3. 什么是包5. 什么是库6. 形象理解模块与库7. 库的分类1. 标准库2. 第三方库8. 总结1. Python 就是一个解释器 我们把程序员编写的代码形象理解为写了一个纯文本文件。 我们希望这个文本文件能被计算机…

锁相环(1)

PLL代表相位锁定环。顾名思义&#xff0c;如下图所示&#xff0c;PLL是一种具有反馈循环的电路&#xff0c;可将反馈信号的相/频率保持与参考输入信号的相/频率相同&#xff08;锁定&#xff09;。 如下图所示&#xff0c;如果参考输入和反馈输入之间存在相位差&#xff0c;则…

是德Keysight E4991A/e4991B射频阻抗/材料分析仪

Keysight E4991A 射频阻抗/材料分析仪提供终极阻抗测量性能和强大的内置分析功能。它将为评估 3 GHz 范围内组件的组件和电路设计人员的研发提供创新。E4991A 使用 RF-IV 技术&#xff0c;而不是反射测量技术&#xff0c;可在宽阻抗范围内进行更精确的阻抗测量。基本阻抗精度为…

在屎山代码中快速找到想要的代码法-锁表法(C#)

由于本人水平有限&#xff0c;文中有写得不对的地方请指正&#xff0c;本文的方法有些投机取巧&#xff0c;实在是没招的情况下可以酌情使用&#xff0c;如有侵权&#xff0c;请联系删除。 前几天接到一个需求&#xff0c;要在医嘱签署时对检验项目进行分方操作&#xff0c;分…