1. 生成随机排列
t.randperm(5)
2. 重新调整tensor形状
a = t.range(0,6)
a.veiw(2,3)
a.unsqueeze(1) #注意形状,在第一维(下标从0开始)上增加1
a.unsqueeze(1) #压缩第1维的‘1’
a.unsqueeze() #把所有维度维“1”的压缩
a.resize_(4,3) #旧的数据依旧保存着,多出的数据会分配新空间
图片.png
3.设置下限和上界
t.clamp(a, min = 3)
t.clamp(a, max = 4)
4. Tensor和Numpy转换
Tensor和Numpy数组之间具有很高的相似性,彼此之间的互操作也非常简单高效。需要注意的是,Numpy和Tensor共享内存。由于Numpy历史有据,支持丰富的操作,所以当遇到Tensor不支持的操作时,可先转成Numpy数据,处理后再转回tensor,其转换开销很小。
b = t.from_numpy(a)
b = t.Tensor(a)
f = b.numpy()
5.autograd
PyTorch在autograd模块中实现了计算图的相关功能,autograd中的核心数据结构时Variable。Variable封装了tensor,并记录对tensor的操作记录用来构建计算图。
data: 保存variable所包含的tensor
grad: 保存data对应的梯度,grad也是variable,而不是tensor,它与data形状一致。
grad_fn:指向一个Function,记录tensor的操作历史,即它是什么操作的输出,用来构建计算图。如果某一个变量是有用户创建的,则它为叶子节点,对应的grad_fn等于None.
非叶子节点grad计算完之后自动清空.那如何获取中间变量的梯度?
t.autograd.grad(z,y) #z对y的梯度,隐式调用backward()
网友评论