首先对张量Tensor做一个整体的了解:
在深度学习中,张量表示的是一个多维数组,它是标量、向量、矩阵的拓展。标量是零维张量,向量是一维张量,矩阵是二维张量,一个RGB图像的数组就是一个三维张量,第一维是图像的高,第二维是图像的宽,第三维是图像的颜色通道。
我们需要记录和更新模型参数,更新的过程需要梯度,张量就是记录模型的梯度。
张量的结构
常用属性
data
:多维数组dtype
: 多维数组的数据类型shape
: 多维数组形状device
: cpu还是gpugrad
等:梯度计算用到的
张量api
-
创建张量
torch.tensor(data,dtyoe=None,device=None,requires_grad=False,pin_memory=False)
-
创建张量方法2
torch.from_numpy()
这个方法和方法1的区别就是,原array和新创建的tensor公用同一块内存,即修改一个,另一个也改 -
依数值创建
torch.zeros(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
功能:依给定的size创建一个全0的tensor,默认数据类型为torch.float32(也称为torch.float) -
out(tensor,optional)
的作用:输出的tensor(即该函数返回的tensor)可以通过out进行赋值,有点儿c++中的“引用”的意思。如下例子:
import torch
o_t = torch.tensor([1,1,1])
t = torch.zeros((3, 3), out=o_t)
print(t, '\n', o_t)
print(id(t), id(o_t)
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
4925603056 4925603056
通过值和地址的比较,就可看出不仅可以赋值,而且共享一块内存。
torch.zeros_like(input, dtype=None, layout=None, device=None, requires_grad=False)
依input的size创建全0的tensor
其他一些常见的函数,用到再查吧,我目前只常用到了上面这些hh