一、张量的简介
torch.Tensor包含的数据:
data:被包装的Tensor.
dtype:数据类型,如torch.FloatTensor、torch.cuda.FloatTensor.
shape:形状.
device:所在设备,GPU/CPU,是加速的关键.
require_grad:指示是否需要梯度.
grad:data的梯度.
grad_fn:创建Tensor的Function,是自动求导的关键.
is_leaf:指示是否是叶子节点.
import torch
w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)
a = torch.add(w, x)
b = torch.add(w, 1)
y = torch.mul(a, b)
y.backward()
print("w.grad = ",w.grad)
print('Isleaf = ', w.is_leaf, x.is_leaf, a.is_leaf, b.is_leaf)
print('gradient = ', w.grad, x.grad, a.grad, b.grad)
print('grad_fn: = ', w.grad_fn, x.grad_fn, a.grad_fn, b.grad_fn)
w.grad = tensor([5.])
Isleaf = True True False False
gradient = tensor([5.]) tensor([2.]) None None
grad_fn = None None <AddBackward0 object at 0x00000219999896C8> <AddBackward0 object at 0x0000021999989F88>
二、张量的创建
Ⅰ、直接创建
1、torch.tensor():从data创建tensor
torch.tensor(data, => 数据,可以是list、numpy
dtype = None, => 数据类型,默认和data相同
device = None, => 所在设备,cuda/cpu
requires_grad = None, => 是否需要梯度
pin_memory = False) => 是否于锁业内存
2、torch.from_numpy():从numpy创建tensor
torch.from_numpy(ndarray)
功能:从numpy创建tensor。
注:从torch.from_numpy创建的tensor与原ndarry共享内存。
Ⅱ、直接创建
1、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) => 是否需要梯度
2、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) => 是否需要梯度
3、torch.arange():一维等差张量
torch.arange(start = 0, => 数列起始值
end, => 数列“结束值”
step = 1, => 数列公差,默认为1
out = None,
dtype = None,
layout = torch.strided,
device = None,
requires_grad = False)
功能:创建等差的一维张量
注:数值区间为[start, end)
4、torch.linspace():一维张量
torch.linspace(start, => 数列起始值
end, => 数列结束值
step = 100, => 数列长度(元素个数)
out = None,
dtype = None,
layout = torch.strided,
device = None,
requires_grad = False)
功能:创建均分的一维向量
数值区间为[start, end]
5、torch.eye():对角矩阵
torch.eye(n, => 矩阵行数
m = None, => 矩阵列数
out = None,
dtype = None,
layout = torch.strided,
device = None,
requires_grad = False)
6、torch.normal():正态分布张量
torch.normal(mean, => 均值
std, => 标准差
out = None)
四种模式:mean为标/张量,std为标/张量