浙江大学教授【深度学习框架PyTorch】课程笔记
(https://www.bilibili.com/video/BV1wL4y1t7ah?p=15)
1.python与pytorch数据类型对比
表示整型数字3,就用IntTensor,但是dimension为0
表示数组,例如矩阵,就是dimension为2的Int array,用IntTensor,同时dimension为2
对于python中的数据类型来说,pytorch都可以一一对应,只是换了个名字
但是string在pytorch中没有与之对应的类型
2.Pytorch如何处理string
one-hot编码中每一个位置代表一个意思,因此两个单词的相关性并没有体现
Embedding layer可以解决上述问题
pytorch没有类间string支持,只能通过编码实现。
3.Pytorch类间的数据类型
即使是同一个数据,但是放在不同的位置,它的类型可能是不一样的。
4.类型推断
In[5]:2维tensor,第0个维度的长度是2,第1个维度的长度是3,(2行3列)
使用randn随机正态分布来初始化2行3列的tensor。其中N(0,1),0是均值,1是方差
In[6]:使用tensor.type()方法可以返回一个string,代表tensor的类型,可用print输出
In[7]:python自带的type(tensor)的方法
In[8]:参数的合法化检验可以使用isinstance,如判断a是不是FloatTensor
In[7]方法使用较少,最常用[6]和[8]
同一个tensor部署在CPU和GPU上其数据类型是不一样的。如In[21]中data部署在CPU上,经过In[22]移动到GPU上(x.cuda()会返回一个GPU上的引用),数据类型发生变化。
4.1 标量(Dim 0)
1.3是0维,但是[1.3]是1维,长度为1的tensor
计算输出值与目标值之间的误差,误差最终求和平均之后会得到一个标量,这个标量就是loss。
4.2 Dim 1 / rank 1
.tensor接受的是数据的内容
dimension为1的tensor一般是bias(偏差)和(Linear Input)线性层输入
如何得到dimension为1的shape或者说size:
如何区分dimension/rank和size/shape:
比如一个2维的tensor:[2,2]
dimension:2,指的就是行和列
size/shape:[2,2],指的是具体形状
4.3 Dim 2
如果输入a.size(),则返回torch.Size([2, 3])
但是如果输入a.size(0),则表示取shape的第1个元素:2
a.size(1),则表示取shape的第2个元素:3
4.4 Dim 3
三维dimension使用最广的场景是RNN,文字处理:
4.5 Dim 4
CNN:[b, c, h, w]
4.6 Mixed
numel是指tensor占用内存的数量