pytorch中的
在数学中,一个单独的数可以成为标量,一行或者一列数组可以称为向量,一个二维数组称为一个矩阵,矩阵中的每一个元素可以被行和列所唯一确定,如果数组的维度超过2那么我们称该数组为张量Tensor。
但在pytorch中张量属于一种数据结构,它可以是一个标量、数组、向量、矩阵、甚至更高维的数组,它和numpy中的ndarray非常相似,在使用的过程中经常转换
数据类型 | dtype | cpu tensor | GPU tensor |
---|---|---|---|
32位浮点型 | torch.float32或torch.float | torch.FloatTensor | torch.cuda.FloatTensor |
64位浮点型 | torch.float64或torch.double | torch.DoubleTensor | torch.cuda.DoubleTensor |
16位浮点型 | torch.float16或torch.half | torch.HalfTensor | torch.cuda.HalfTensor |
8位无符号整型 | torch.unit8 | torch.ByteTensor | torch.cuda.ByteTensor |
8位有符号整型 | torch.int8 | torch.CharTensor | torch.cuda.CharTensor |
torch中默认使用的数据类型是32位浮点数
在程序中使用torch.tensor()生成一个张量然后通过.dtype方法获取张量的数据类型,结果位32位浮点数。
import torch
torch.tensor([1.2,3.4]).dtype
使用set_default_tensor_type来设置默认的数据类型
torch.set_default_tensor_type(torch.DoubleTensor)
torch.tensor([1.2,3.4]).dtype
torch中还有其他的数据类型的数据,将浮点型转化为其他的数据类型的方法如下
a = torch.tensor([1.2,3.4])
a.dtype
a.int().dtype
a.long().dtype
a.float().dtype
获取默认数据集的方法
torch.get_default_dtype()
张量的生成可以有很多的方式,下面对生成的方式进行列举
A = torch.tensor([[1.0,1.0],[2,2]])
A
张量的维度可以通过.shape查看,并使用.size()方法计算张量的形状的大小,使用.numel()方法计算张量中包含的元素的数量
例如:
# 获得张量的维度
A.shape
# 获得张量的形状
A.size()
# 计算张量中包括的元素的数量
A.numel()
在使用torch.tensor()函数的时,可以使用参数dtype来指定张量的数据类型,使用参数requires_grad来指定是否需要计算梯度。只有计算梯度的张量才能在深度网络优化时根据梯度的大小进行更新。
B = torch.tensor((1,2,3),dtype=torch.float32,requires_grad=True)
B
需要注意的是只有浮点型的数据才能计算梯度,其他的数据类型不能计算张量否则会报错
y= B.pow(2).sum()
y.backward()
B.grad
C = torch.Tensor([1,2,3,4])
C
也可以根据形状参数生成特定尺寸的张量。例如生成3x3的张量
D = torch.Tensor(3,3)
D
针对已经生成的张量可以使用torch.**_like()系列函数生成与指定张量相同性质相似的张量
# 创建一个和D大小相同且全是1的张量
torch.ones_like(D)
使用torch.zeros_like()函数生成与D维度相同的全为0的张量
torch.zeros_like(D)
使用torch.rand_like()函数生成与D维度相同的张量
torch.rand_like(D)
将numpy数组转化为pytorch张量,可以使用torch.as_tensor()函数和torch.from_numpy函数
举例如下:
import numpy as np
F = np.ones((3,3))
F
# 使用torch.as_tensor()函数
Ftensor = torch.as_tensor(F)
Ftensor
# 使用torch.from_numpy
Ftensor = torch.from_numpy(F)
Ftensor
使用torch.numpy()函数即可转化为Numpy数组
Ftensor.numpy()
通过pytorch代码构造张量的过程,体现出了代码创造童话,共建快乐世界。