当前位置: 首页 > news >正文

Pytorch 基础之张量数据类型

学习之前:先了解 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 张量数据类型进行了一些简单的介绍,有不足之处,欢迎一起探讨。

相关文章:

Pytorch 基础之张量数据类型

学习之前&#xff1a;先了解 Tensor&#xff08;张量&#xff09; 官方文档的解释是&#xff1a; 张量如同数组和矩阵一样, 是一种特殊的数据结构。在PyTorch中, 神经网络的输入、输出以及网络的参数等数据, 都是使用张量来进行描述。 说白了就是一种数据结构 基本数据类型…...

Java 基础面试题——常见类

目录1.String 为什么是不可变的&#xff1f;2.字符串拼接用“” 和 StringBuilder 有什么区别?3.String、StringBuffer 和 StringBuilder 的区别是什么?4.String 中的 equals() 和 Object 中的 equals() 有何区别&#xff1f;5.Object 类有哪些常用的方法&#xff1f;6.如何获…...

Windows 系统从零配置 Python 环境,安装CUDA、CUDNN、PyTorch 详细教程

文章目录1 配置 python 环境1.1 安装 Anaconda1.2 检查环境安装成功1.3 创建虚拟环境1.4 进入/退出 刚刚创建的环境1.5 其它操作1.5.1 查看电脑上所有已创建的环境1.5.2 删除已创建的环境2 安装 CUDA 和 CUDNN2.1 查看自己电脑支持的 CUDA 版本2.2 安装 CUDA2.3 安装 CUDNN2.4 …...

[REDIS]redis的一些配置文件

修改配置文件 vim /etc/redis/redis.conf目录 protected-mode tcp-backlog timeout tcp-keepalive daemonize pidfile loglevel databases 设置密码 maxclients maxmemory maxmemory-policy maxmemory-samples 默认情况下 bind127.0.0.1 只能接受本机的访问请求。在不写的情况…...

Java反序列化漏洞——CommonsCollections4.0版本—CC2、CC4

一、概述4.0版本的CommonsCollections对之前的版本做了一定的更改&#xff0c;那么之前的CC链反序列化再4版本中是否可用呢。实际上是可用的&#xff0c;比如CC6的链&#xff0c;引入的时候因为⽼的Gadget中依赖的包名都是org.apache.commons.collections &#xff0c;⽽新的包…...

下载网上压缩包(包含多行json)并将其转换为字典的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...

【郭东白架构课 模块一:生存法则】11|法则五:架构师为什么要关注技术体系的外部适应性?

你好&#xff0c; 我是郭东白。 前四条法则分别讲了目标、资源、人性和技术周期&#xff0c;这些都与架构活动的外部环境有关。那么今天我们来讲讲在架构活动内部&#xff0c;也就是在架构师可控的范围内&#xff0c;应该遵守哪些法则。今天这节课&#xff0c;我们就先从技术体…...

Mindspore安装

本文用于记录搭建昇思MindSpore开发及使用环境的过程&#xff0c;并通过MindSpore的API快速实现了一个简单的深度学习模型。 什么是MindSpore? 昇思MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行、全场景覆盖三大目标。 安装步骤 鉴于笔者手头硬…...

C++010-C++嵌套循环

文章目录C010-C嵌套循环嵌套循环嵌套循环举例题目描述 输出1的个数题目描述 输出n行99乘法表题目描述 求s1!2!...10!作业在线练习&#xff1a;总结C010-C嵌套循环 在线练习&#xff1a; http://noi.openjudge.cn/ https://www.luogu.com.cn/ 嵌套循环 循环可以指挥计算机重复去…...

设计模式之迭代器模式与命令模式详解和应用

目录1 迭代器模式1.1 目标1.2 内容定位1.3 迭代器模式1.4 迭代器模式的应用场景1.5 手写字定义的送代器1.6 迭代器模式在源码中的体现1.7 迭代器模式的优缺点2 命令模式2.1 定义2.2 命令模式的应用场景2.3 命令模式在业务场景中的应用2.4 命令模式在源码中的体现2.5 命令模式的…...

【QA】[Vue/复选框全选] v-model绑定每一项的赋初值问题

发生场景&#xff1a;不只是复选框的状态改变&#xff0c;还有的功能要用到复选框的选中状态&#xff0c;比如&#xff1a;购物车计算总价&#xff0c;合计等等。 引入&#xff1a;复选框 checkbox 在使用时&#xff0c;需要用v-model绑定布尔值&#xff0c;来获取选中状态&…...

python基于django+vue微信小程序的校园二手闲置物品交易

在大学校园里,存在着很多的二手商品,但是由于信息资源的不流通以及传统二手商品信息交流方式的笨拙,导致了很多仍然具有一定价值或者具有非常价值的二手商品的囤积,乃至被当作废弃物处理。现在通过微信小程序的校园二手交易平台,可以方便快捷的发布和交流任何二手商品的信息,并…...

设计模式之观察者模式

什么是观察者模式 观察者模式定义了对象之间一种一对多依赖关系&#xff0c;使得每当一个对象状态发生改变时&#xff0c;其相关依赖对象都能收到通知并自动刷新。     观察者模式主要包含以下几个角色&#xff1a;         Subject(目标)&#xff1a;指被观察的对…...

Java Lambda表达式

目录1 Lambda表达式1.1 函数式编程思想概括1.2 Lambda表达式标准格式1.3 Lambda表达式练习1&#xff08;抽象方法无参无返回值&#xff09;1.4 Lambda表达式练习2&#xff08;抽象方法带参无返回值&#xff09;1.5 Lambda表达式练习2&#xff08;抽象方法带参带返回值&#xff…...

【1237. 找出给定方程的正整数解】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个函数 f(x, y) 和一个目标结果 z&#xff0c;函数公式未知&#xff0c;请你计算方程 f(x,y) z 所有可能的正整数 数对 x 和 y。满足条件的结果数对可以按任意顺序返回。 尽管函数的具体式子…...

java基础学习 day41(继承中成员变量和成员方法的访问特点,方法的重写)

继承中&#xff0c;成员变量的访问特点 a. name前什么都不加&#xff0c;name变量的访问采用就近原则&#xff0c;先在局部变量中查找&#xff0c;若没找到&#xff0c;继续在本类的成员变量中查找&#xff0c;若没找到&#xff0c;继续在直接父类的成员变量中查找&#xff0c…...

【c语言进阶】深度剖析整形数据

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a; &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最大的激励…...

【信息系统项目管理师】项目管理十大知识领域记忆敲出(采购风险沟通干系人)

【信息系统项目管理师】项目管理十大知识领域记忆敲出&#xff08;采购风险沟通干系人&#xff09; 这里写目录标题【信息系统项目管理师】项目管理十大知识领域记忆敲出&#xff08;采购风险沟通干系人&#xff09;一.项目采购管理记忆敲出1.合同管理&#xff1a;2.规划采购管…...

[LeetCode 1237]找出给定方程的正整数解

题目描述 题目链接&#xff1a;[LeetCode 1237]找出给定方程的正整数解 给你一个函数 f(x, y) 和一个目标结果 z&#xff0c;函数公式未知&#xff0c;请你计算方程 f(x,y) z 所有可能的正整数 数对 x 和 y。满足条件的结果数对可以按任意顺序返回。 尽管函数的具体式子未知…...

6.2 构建 RESTful 应用接口

第6章 构建 RESTful 服务 6.1 RESTful 简介 6.2 构建 RESTful 应用接口 6.3 使用 Swagger 生成 Web API 文档 6.4 实战&#xff1a;实现 Web API 版本控制 6.2 构建 RESTful 应用接口 6.2.1 Spring Boot 对 RESTful 的支持 Spring Boot 提供的spring-boot-starter-web组件完全…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...