Pytorch课程笔记(一)张量数据类型
Python与Pytorch数据类型的区别联系
Python | Pytorch |
---|---|
Int | IntTensor of size() |
float | FloatTensor of size() |
Int array | IntTensor of size[d1,d2,…] |
float arry | floatTensor of size[d1,d2,…] |
string | … |
Python中的数据类型在Pytorch中都有相应的对应,相对来说比较特殊的是string
遗憾的是Pytorch不是一个完备的语言库,而是面向数据计算的GPU加速库,没有类建对string的支持
Pytorch对string的表示
虽然没有类建的库用来实现对string的处理,但是在NLP领域,通过深度学习,对讲一段话的内容进行识别,以下两种方法常用
1.One-hot (一种编码表示的方法)
- [0,1,0,0,0,…]
例如:
[0,1]----->dog
[1,0]----->cat
在计算机中,字母A的表示是ASCII码表示0x41
在应用中,采用编码的方式,没办法表达语义之间的相关性
2. Embeding
- Word2vec
- glove
Pytorch类建数据类型
同一个数据,放在不同位置,数据类型是不同的
类型检查
#引入torch库
import torch
#随机生成生成均值为0,方差为1的2X3矩阵
a = torch.randn(2, 3)
#返回string类型
b = a.type()
#参数合法化检验
c = isinstance(a, torch.FloatTensor)
print(type(a))
print(a)
print(b)
print(c)
结果:
同一个tensor部署在CPU和GPU上是不一样的
import torch
data = torch.randn(2, 3)
d = isinstance(data, torch.cuda.DoubleTensor)
print(d)
结果:
要想实现CPU到GPU需要一个数据的搬运,在进行数据比较,即为真
data = data.cuda()
x.cuda()会返回一个gpu上的引用
数据类型之零维——标量
#0维
torch.tensor(1.)
1.3是0维,但是[1.3]是一维,长度为1的Tensor
平时中计算的Loss就是Dimension为0的标量
如何得到标量的shape?
a = torch.tensor(1.)
b = len(a.shape)
c = a.size()
结果:
这里的a.shape和a.size()都会返回一个空list类型的size对象
数据类型之一维——张量
1、torch.tensor([])指定的是一个确定的一维张量
2、torch.FloatTensor(1)指定的是一个随机的一维张量
3、还可以使用numpy的方法指定一维张量
维数1的张量应用在哪些地方?
1、偏置(Bias)
2、线性输入(Linear Input)
将28X28的数据图片铺平成一个包含784个元素的一维张量
如何得到维数1的张量?
import torch
import numpy
a = torch.ones(2)
#b = torch.tensor([1, 1])
print(a)
print(a.shape)
结果:
数据类型之二维——张量
a = torch.randn(2, 3)
结果:
随机生成2行,3列的数组
这里的size(0)和shape[0]都表示取行,size(1)shape[1]表示取列
数据类型之三维——张量
a = torch.rand(1,2,3)
结果:
这里有三个[],表示一个三维张量
箭头所指的第一个括号表示1,代表元素只有一个
在文字处理方面应用广泛
数据类型之四维——张量
a = troch.rand(2,3,2,2)
结果:
在CNN中应用广泛
[b(branch), c(channel), h(height), w(width)]
补充
处理使用shape的方法外,还可以利用
a.numel()
numel是指tensor占用内存的数量
此外
a.dim()&a.shape
都可以返回维度