【pytorch03】pytorch基本数据类型


问题:String类型在pytorch中如何表示?

很遗憾,pytorch不是完备的语言库,而是面向数据计算的一个GPU加速库,因此没有内建对string的支持

我们会在做NLP的时候会遇到all string处理的问题,就比如说一句话,把这句话翻译成另外一个国家的语言,这里面肯定是要注意string的,那么作为深度学习的一个GPU加速库pytorch免不了要处理string,但是它内部又没有string的自带的表示方法,那如何表达string呢?

两种表示方法:

  • One-hot
    • 0,1,0,0,...

  • Embedding
    • Word2vec
    • glove

one-hot之前已经讲过,这里简单回顾,比如要表达猫狗这两类,用一维向量[0,1]来表示cat,[1,0]来表示dog,因此是一种编码表示,我们其实是没有内建string的支持的,只是用一种数字的方法来替代了

26个字母只要编码为一个长度为26的向量,但对于汉字或者多国的语言,甚至其他的单词(英语单词常用的单词有上万个),那么单词如果用一个上万列向量的编码来表示,整个向量会变得会变得非常稀疏(也就是大部分元素是0,只有一个元素位置是1),更致命的是这个向量会因为语言之间(例如 i like 或 i love)的语义相关性(i dislike)语义相反性,但对于one-hot编码来说每一个位置代表一个意思,因此两个单词之间的相关性并没有在one-hot中得到体现,怎么解决这个问题?

在NLP里面有一个专门的embedding layer,就是解决怎么用数字的方法来表示一个语言并具有相关性的方法

注意:一个tensor有可能被放置在CPU上,也有可能被放置在GPU上,对于GPU上的tensor,即使我们觉得可能它和CPU上的tensor是一个东西,但是对于pytorch来说并不是,GPU上的tensor会在中间加cuda

x.cuda()会返回gpu上的一个引用

数据一样,放的位置不一样,造成的类型不一样

标量

1.3是0维,但是[1.3]是1维,长度为1的Tensor

问题:dimension为0的数据用来表示什么?

最常见的就是计算loss,计算输出值跟我们期待的那个值之间的误差,误差最终求和平均后会得到一个标量,这个标量就称之为loss,这个loss用的最多的就是一个dimension为0的标量,如果用instance把它打印出来的话可以看到是一个size为0的某一种数据类型

问题:如何得到变量的shape

a.shape对应的是a.size()函数,shape是一个成员,而size()是一个成员函数

dimension为1

数学中叫做向量,pytorch中统一称之为张量

.tensor()的时候指定的是具体的数据

.FloatTensor()的时候是随机初始化的,只需要接收数据的shape

问题:dimension为1的tensor一般用在哪?

用在bias(偏移量),偏移量的维度一般都是1维的

神经网络线性层的输入

28,28\]=\>\[784

pytorch 0.3之前dimension=0是不存在的

为了区分标量0.3和长度为1的向量[0.3]就引入了dimension=0

如何得到dimension为1向量的shape

可以用.shape也可以用.size()函数
问题:如何区分dimension、size(或者叫shape)?

比如说2维的tensor,这个2维的2的意思就是dimension,size是整个shape

dimension就是size的长度

size就是指代的tensor具体的形状

dimension为2

dimension=2经常使用的例子

带有batch的线性层的输入,例如1张图片用784的dimension为1的tensor来表达,但是如果一次要输入多张图片怎么办?

把多张图片叠在一起,每一张图片用784位的向量来表示,因此这个tensor的维度就是2,这个tensor的size就是[4,784]

第一个维度的4表示哪一张照片,每一张照片跟着的784这样的一个维度表示这个照片的具体数据内容

dimension为3

对于三维的tensor用一个非常广泛的使用场景RNN,对于一个RNN来说,一句话有10个单词,每个单词用one-hot编码,比如说用100位这样的向量来编码

10个单词word是W,每一句话的feature是F用100位的向量来表示,如[10,100]

如果要一次送入多句话的话我们要将batch插在中间[10,20,100],10个单词每一次送20句话每一个单词用一个100维的向量来表示,所以20表示20句句子

dimension为4

对于4维的tensor适合图片这种类型CNN

2,3,28,28

1是通道数,对于灰色图片来说通道数是1,彩色图片的通道数是3

有2张照片,每一张照片有3个通道,每个通道的长宽为28×28

额外知识

除了可以用shape获取tensor的形状,还可以用获取tensor元素的总数4704=23 28*28

除了len(a.shape)可以返回shape的长度以外(即tensor的维度),a.dim()也可以返回tensor的维度,并且更加直观

相关推荐
吃好睡好便好19 分钟前
提取矩阵某一行或某一列元素
开发语言·人工智能·线性代数·算法·matlab·矩阵
AI数字化笔记2 小时前
【无标题】
人工智能
悦数图数据库2 小时前
图数据库选型指南 2026:从架构、性能、AI 适配三个维度看 悦数科技
数据库·人工智能·架构
小江的记录本3 小时前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
北京耐用通信3 小时前
自动化工程师必修课:耐达讯自动化Modbus TCP转PROFIBUS协议转换的核心逻辑与应用
人工智能·物联网·网络协议·自动化·信息与通信
无忧智库3 小时前
某AI漫剧超级工厂AI绘画与分镜自动化生成流水线详细设计方案(WORD)
人工智能·ai作画·自动化
火山引擎开发者社区3 小时前
ArkClaw 全新升级,从 UI 到 Agent 协作全面进化
人工智能
Mininglamp_27183 小时前
会中 AI Skill 架构设计解析:3 种人设 × 7 种能力的技术实现
人工智能·语音识别·硬件·ai agent·skill
墨神谕3 小时前
人工智能(三)— 神经网络的训练
人工智能·神经网络·机器学习
APIshop3 小时前
Python 获取 1688 商品采集 API 接口 | 工厂货源自动化对接商品信息 | 无需选品
运维·python·自动化