PyTorch笔记01----基本数据类型

PyTorch基本数据类型

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 --

Pytorch不是一个完备的语言库,不支持String.

How to denote string

  • One-hot Encoding [0, 1, 0, 0, ...] 每一维代表一个单词 > 数据量过大时,整个向量会变得特别稀疏. > 不同的单词有相近的意思,如like、love,这种方法无法体现这种相关性.

  • Embedding

    • Word2vec
    • glove

Data type

CPU tensor: - torch.FloatTensor - torch.IntTensor - ...

GPU tensor: 在torch与tensor之间加上cuda - torch.cuda.FloatTensor - torch.cuda.IntTensor - ...

Type check

a = torch.randn(2, 3)   #使用随机正态分布
a.type() #'torch.FloatTensor'

type(a) #'torch.Tensor'返回基本的数据类型

isinstance(a, torch.FloatTensor) #True
isinstance(data, torch.cuda.DoubleTensor)   #False
data = data.cuda()
isinstance(data, torch.cuda.DoubleTensor) #True

Dimension 0 / Rank 0 标量

torch.tensor(1.)    #直接生成标量Tensor(1.)
torch.tensor(1.3) #直接生成标量tensor(1.300)

经常用于计算Loss --- 维度为0的标量.

如何确定Dim为0?

Loss.shape  #torch.Size([])

len(Loss.shape) #0

Loss.dim() #0

Loss.size() #torch.Size([])

Dimension 1 / Rank 1 向量

PyTorch里一维多维向量统称tensor张量

torch.tensor([1.1])     #tensor([1.1000]) 注意有中括号
torch.tensor([1.1, 2.2]) #tensor([1.1000, 2.2000])

torch.FloatTensor(1) #tensor([3.2239e-25]) 指定长度,random初始化
torch.FloatTensor(2) #tensor([3.2239e-25, 4.5915e-41])

#还可以通过numpy引入
data = np.ones(2) #生成一个[1, 1]的向量
data #array([1., 1.])

torch.from_numpy(data) #tensor([1., 1.], dtype=torch.float64)

Dim 1的张量一般用于Bias(偏置)、Linear Input(神经网络线性层的输入)(如[28, 28]的图片展开成[748]长度的向量输入).

a = torch.ones(2)
a.shape #torch.Size([2])
a.size() #torch.Size([2])

Dimension 2、Dimension 3、......

a = torch.randn(2,3)
a #tensor([[-0.4423, 0.5949, 1.1440],
[-2.0935, 0.2051, 1.2781]])

a.shape #torch.Size([2,3])
a.size(0) #2 第一个维度的长度
a.shape[0] #2
a.size(1) #3 第二个维度的长度
a.shape[1] #3

Dim 2的张量一般用于Linear Input batch(如4张[28, 28]的图片,我们将它们叠在一起,形成[4, 784],4表示4张照片,784表示一张照片的数据)


a = torch.rand(1,2,3)   #使用随机均匀分布
a #tensor([[[0.0764, 0.2590, 0.9816],
[0.6798, 0.1568, 0.7919]]])

a.shape #torch.Size([1, 2, 3])

a[0] #tensor([[0.0764, 0.2590, 0.9816],
[0.6798, 0.1568, 0.7919]])

list(a.shape) #[1, 2, 3]

Dim 3在RNN Input Batch中使用非常广泛: 一句话有10个单词,每个单词用一个100维的One-hot编码,一次送入20句话,就是[10, 20, 100]

Dim 4适合彩色图片: [2, 3, 28, 28] 2张图片,3个通道(RGB,如果是黑白图片则是1),28*28像素的图片

a = torch.rand(2, 3, 28, 28)

a.dim() #4
a.numel()   #4704 4704 = 2 * 3 * 28 * 28