python | PyTorch |
---|---|
int | IntTensor of size() |
float | FloatTensor of size() |
Int array | IntTensor of size[d1,d2,…] |
Float array | FloatTensor of size [d1,d2,…] |
string | – |
需要注意的是,python中的string,在PyTorch中没有对应的数据类型,一般使用One-hot可以进行表示,也就是[0,1,0,0,0]的方式表示一个字符串,或者使用Embedding的方式,常用的有Word2vec和glove
1. 类型推断
import torch
a = torch.randn(2,3) # 使用随机正态分布方法,均值0,方差1,N(0,1),新建了2维向量,两行三列,
a.type() # 'torch.FloatTensor'
type(a) # <class 'torch.Tensor'>
isinstance(a, torch.FloatTensor) # True
需要注意的是同一个tensor在CPU和GPU中是不一样的。
isinstance(a, torch.cuda.FloatTensor) # False
a = a.cuda()
isinstance(a, torch.cuda.FloatTensor) # True
a.cuda()
会返回一个gpu上的引用。
标量
b = torch.tensor(1.3)
b.shape # torch.Size([])
b.dim() # 0
b.size() # torch.Size([])
torch.tensor(1.)
就创建了值为1
的标量。torch.tensor(1.3)
创建了值为1.3000
的标量。
注意,1.3是0维,但是[1.3]是1维,长度为1的Tensor
我们通常使用的loss
就是维度为0的标量。
向量
在PyTorch中统一称向量为张量。
c = torch.tensor([1.1]) # 创建了1维的张量,值为1.100
c = torch.tensor([1.1, 2.2]) # 创建了2维的张量,值为1.1000, 2.2000
torch.FloatTensor(1) # 随机创建一个1维的Float张量,值随机 tensor([0.])
torch.FloatTensor(2) # 随机创建一个2维的Float张量,值随机 tensor([1.0842e-19, 1.9859e+00])
# 可以通过引入numpy来创建张量
data = numpy.ones(2) # 长度维2的向量,值为array([1., 1.])
torch.from_numpy(data) # 从numpy中引入数据,值为tensor([1., 1.], dtype=torch.float64)
我们通常使用的bias
偏置,就是维度为1的张量。
需要注意的是,在PyTorch0.3以及之前的版本中,维度为0的张量是不存在的,例如loss=0.3的dim为1,在PyTorch0.4以及以后的版本中,loss=0.3表示一个标量。
举例:
下面一个例子中,dim=2,随机正态分布数据:
a = torch.randn(2,3) # 随机生成dim=2的tensor
# tensor([[-0.3537, -0.2374, 0.3935],
# [ 0.0542, -0.2078, 0.6238]])
a.shape # torch.Size([2, 3])
a.size() # torch.Size([2, 3])
a.size(0) # 2
a.size(1) # 3
a.shape[0] # 2
a.shape[1] # 3
下面一个例子中,dim=3,随机均匀分布数据:
a = torch.rand(1,2,3) #生成随机均匀分布数据
# tensor([[[0.9005, 0.5394, 0.7798],
# [0.5691, 0.3837, 0.1468]]])
a[0]
# tensor([[0.9005, 0.5394, 0.7798],
# [0.5691, 0.3837, 0.1468]])
三维张量,适合RNN这种网络结构。
下面一个例子中,dim=4,随机均匀分布数据:
a = torch.rand(2,3,28,28) #生成随机均匀分布数据,例如在图片中,2表示两张照片,3表示颜色通道RGB,28表示长,28表示宽
四维张量,适合卷积神经网络。
a = torch.rand(2,3,28,28)
a.numel() # 表示tensor占用内存的数量 number of element
a.dim() # a的维度