| 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的维度

本文详细介绍了PyTorch中张量的数据类型,包括int、float、IntTensor、FloatTensor等,并讨论了如何用One-hot或Embedding表示字符串。通过实例展示了张量的创建、类型转换以及在CPU和GPU之间的操作。此外,还讲解了张量的维度,包括标量、向量的概念,以及如何通过torch.randn()和torch.tensor()生成不同维度的张量。最后,通过实际示例说明了张量的形状、大小和元素数量的获取方法。
1434

被折叠的 条评论
为什么被折叠?



