一、张量的简介
张量(tensor),就是一个多维数组,它是标量、向量、矩阵的高维拓展。
torch.Tensor包含的数据:
data:被包装的Tensor.
dtype:数据类型,如torch.FloatTensor、torch.cuda.FloatTensor.
shape:形状.
device:所在设备,GPU/CPU,是加速的关键.
require_grad:指示是否需要梯度.
grad:data的梯度.
grad_fn:创建Tensor的Function,是自动求导的关键.
is_leaf:指示是否是叶子节点.
二、张量的创建
1、直接创建
方式一:torch.tensor():从data创建tensor
torch.tensor(data, => 数据,可以是list、numpy
dtype = None, => 数据类型,默认和data相同
device = None, => 所在设备,cuda/cpu
requires_grad = None, => 是否需要梯度
pin_memory = False) => 是否存于锁页内存
方式二:torch.from_numpy(ndarray):从numpy创建tensor。
注意:从torch.from_numpy创建的tensor与原ndarry共享内存。
2、间接创建
方式一:torch.zeros():全0张量
torch.zeros(*size, => 张量的形状,如(3, 3)
out = None, => 输出的张量
dtype = None, => 内存数据类型
layout = torch.strided, => 内存中布局形式,有strided,sparse_coo等
device = None, => 所在设备,gpu/cpu
requires_grad =False) => 是否需要梯度
方式二:torch.full():全value张量
torch.full(*size, => 张量的形状,如(3, 3)
fill_value, => 填充值
out = None, => 输出的张量
dtype = None, => 内存数据类型
layout = torch.strided, => 内存中布局形式,有strided,sparse_coo等
device = None, => 所在设备,gpu/cpu
requires_grad =False) => 是否需要梯度
方式三:torch.arange():一维等差张量
torch.arange(start = 0, => 数列起始值
end, => 数列“结束值”
step = 1, => 数列公差,默认为1
out = None,
dtype = None,
layout = torch.strided,
device = None,
requires_grad = False)
功能:创建等差的一维张量
注:数值区间为[start, end)
方式四:torch.linspace():一维张量
torch.linspace(start, => 数列起始值
end, => 数列结束值
step = 100, => 数列长度(元素个数)
out = None,
dtype = None,
layout = torch.strided,
device = None,
requires_grad = False)
功能:创建均分的一维向量
数值区间为[start, end]
方式五:torch.eye():对角矩阵
torch.eye(n, => 矩阵行数
m = None, => 矩阵列数
out = None,
dtype = None,
layout = torch.strided,
device = None,
requires_grad = False)
方式六:torch.normal():正态分布张量
torch.normal(mean, => 均值
std, => 标准差
out = None)
四种模式:mean为标/张量,std为标/张量