本篇介绍Pytorch的基础数据类型,判断方式以及常用向量。
基础数据类型
torch.Tensor
是一种包含单一数据类型元素的多维矩阵。- 目前在1.2版本中有9种类型。
- 同python相比,pytorch没有string类型;
- 由于pytorch是面向计算的,对于字符这种通常通过编码下手;
- 怎样用数字的形式去表示语言(字符串) : NLP -> one-hot 或 Embedding(Word2vec,glove)
判断数据类型
- 打印数据类型:a.type()
- 打印的是基本的数据类型,没有提供额外的信息:type(a)
- 合法性检验:isinstance(a, torch.FloatTensor)
1 | In[2]: import torch |
同一个tensor部署在cpu和gpu时的数据类型是不一样的
1 | In[7]: isinstance(a, torch.cuda.FloatTensor) |
标量 Dimension 0 / rank 0
1 | In[12]: torch.tensor(1.3) |
loss 就是一个标量
查看标量的维度
len(a.shape)
a.dim()
len(a.size())
1 | In[13]: a = torch.tensor(2.2) |
常用向量
1维向量
torch.tensor([ 数据 ])
torch.FloatTensor(维度)
- 从numpy导入
torch.from_numpy(data)
1 | In[19]: torch.tensor([1.1]) |
dim为1的向量有 Bias
Linear Input 线性层的输入
从0.4版本增加了 标量的表示,以前是[0.3]来表示标量,但这样语义上不太清晰。
1维的形状如何得到
- .size
- .shape
几个概念:
dim:指的是size/shape的长度
size/shape指的是具体的形状
tensor指的是具体的数字
2维向量
1 | In[30]: a = torch.randn(2,3) |
常用于带有batch的 Linear Input 例如 [4, 784] 4张784像素的图片
3维向量
形状:list(a.shape)
1 | In[49]: a = torch.rand(1,2,3) // 使用随机的均匀分布 |
场景:NLP文字处理
RNN Input Batch 例如 W,F[10, 100] 一个句子由10个单词构成,且每个单词由100维向量表示
W,S,F[10, 20, 100] 20个句子,每个句子由10个单词构成,且每个单词由100维向量表示
4维向量
1 | In[54]: a = torch.rand(2,3,28,28) //随即均匀化 |
场景 : CNN
[b, c, h, w] b:几张照片 c: 通道 w:宽 h:高度
PS:在我们学习的过程中,一定要结合着物理意义去学习,就比如说我创建一个 [4,3,28,28] 的向量,这个向量有什么含义?当我们把向量进行matmul(矩阵相乘) 后,又有什么含义?不仅仅是为学习工具而去学习,而要时刻明白我这样做能达到什么样的效果。