1.张量是什么?
0维张量就是标量只有大小没有方向。有大小和方向的向量就是一维张量,矩阵就是2维张量,我们接触到的rgb彩色图像实际就是一个三维张量,长宽和通道数。因此可以知道,张量是一个多维数组,是标量、向量和矩阵的高纬拓展。
张量在pytorch中是以tensor表现出来。在pytorch0.40版本以前,自动求导的torch.autgrad.Variable是独立的,用来封装tensor,该数据类型主要有五个参数:
data: 被包装的 Tensor
grad: data 的梯度
grad_fn: 创建 Tensor 的 Function ,是自动
求导的关键
requires_grad: 指示是否需要梯度
is_leaf: 指示是否是叶子结点(张量)
而在pytorch0.40以后的版本,为了方便,将vaiable数据类型并入到tensor。
在variable的基础之上多了三个部分:
dtype: 张量的数据类型,如 torch.FloatTensor, torch.cuda.FloatTensor
shape: 张量的形状,如 (64, 3, 224, 224)
device: 张量所在设备, GPU/CPU ,是加速的关键
2.张量的创建
创建张量有三种方法:一是直接创建法,二是依赖数值创建,三是依赖概率分布创建。
一.直接创建
1.torch.tensor
torch.tensor(
data,
dtype=None,
device=None,
requires_grad=False,
pin_memory=False)
功 能: 从data创建tensor
• data : 数据,可以是list,numpy
• dtype : 数 据 类 型 , 默认与 da ta 的 一致
• device : 所在设备,cuda /cpu
• requires_grad :是否需要梯度
• pin_memory : 是否存于锁页内存
# 通过torch.tensor创建张量
arr = np.ones((3,3))
print("ndarrary的数据集类型:", arr.dtype)
# t = torch.tensor(arr)
t = torch.tensor(arr, device='cuda')
print(t)
//运行结果:
ndarrary的数据集类型: float64
tensor([[1., 1