【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的维度,并且更加直观

相关推荐
徐健峰27 分钟前
GPT-image-2 热门玩法实战(三):AI 手办/Action Figure — 把自己变成盒装玩具
人工智能
扑兔AI32 分钟前
B2B销售线索挖掘效率提升的技术实践:基于工商公开数据的客源筛选与竞品分析架构
大数据·人工智能·架构
亚鲁鲁37 分钟前
00-目录
人工智能
罗西的思考41 分钟前
【GUI-Agent】阿里通义MAI-UI 代码阅读(2)--- 实现
人工智能·算法·机器学习
阿豪只会阿巴1 小时前
【没事学点啥】TurboBlog轻量级个人博客项目——项目介绍
javascript·python·django·html
墨染天姬1 小时前
【AI】cursor提示词小技巧
前端·数据库·人工智能
Raink老师1 小时前
【AI面试临阵磨枪-40】文本切块(Chunking)策略:固定长度、语义切块、递归切块、重叠设计
人工智能·ai 面试
techdashen1 小时前
p99 延迟从 9.5 毫秒降到 18 微秒:Cloudflare 机器学习基础设施重构全记录
人工智能·机器学习·重构
AI服务老曹1 小时前
架构师视角:如何构建支持GB28181/RTSP的异构AI视频平台?从Docker部署到源码交付的深度实践
人工智能·docker·音视频
IT_陈寒2 小时前
Vite热更新失效?你可能漏了这个小细节
前端·人工智能·后端