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

相关推荐
泰迪智能科技011 小时前
高校深度学习视觉应用平台产品介绍
人工智能·深度学习
盛派网络小助手1 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
算法小白(真小白)1 小时前
低代码软件搭建自学第二天——构建拖拽功能
python·低代码·pyqt
唐小旭1 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
007php0072 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
Eric.Lee20212 小时前
Paddle OCR 中英文检测识别 - python 实现
人工智能·opencv·计算机视觉·ocr检测
cd_farsight2 小时前
nlp初学者怎么入门?需要学习哪些?
人工智能·自然语言处理
AI明说2 小时前
评估大语言模型在药物基因组学问答任务中的表现:PGxQA
人工智能·语言模型·自然语言处理·数智药师·数智药学
Chinese Red Guest2 小时前
python
开发语言·python·pygame
Focus_Liu2 小时前
NLP-UIE(Universal Information Extraction)
人工智能·自然语言处理