Tensor基本运算
Tensor基本运算
矩阵相乘
torch.mm:只适合矩阵 dim=2情形
torch.matmul:适用任何形式
@:简便写法
>>>a=torch.rand(4,784) |
>>>a=torch.rand(4,3,28,64) |
乘方
power
>>>a=torch.full([2,2],3) |
取整
.floor():向下取整
.ceil():向上取整
.trunc():取小数
.frac():取整数
.round():四舍五入
a=torch.tensor(3.14) |
裁剪
.clamp():输入参数min
:将小于min的数都置为min
输入参数(min,max)
:将小于min的数都置为min,大于max的数都置为max
a=torch.rand(2,3)*15 |
自动求导:
方法一
1. 首先对需要求导的参数使用requires_grad_()
方法标明需要求导
2. 计算mse:torch.nn.functional.mse_loss($y$,$\hat y$)
3. 使用torch.autograd.grad(mse,[w])
对其进行求导
方法二
-
首先对需要求导的参数使用
requires_grad_()
方法标明需要求导 -
计算mse:torch.nn.functional.mse_loss($y,\hat y$)
-
调用
mse.backward
该指令会计算mse对所有已设置需要求导变量的梯度 -
调用
w.grad
显示梯度backward设置(retain_graph=True)才可以再一次调用,不设置则会报错
import torch.nn.functional as F |
Tensor统计属性
范数
.norm§:求矩阵的 p 范数
.norm(p,dim=x):在 x 维度上做p范数,输出shape为除了原维度去掉x维度
a = torch.rand([8]) |
统计属性
.prod():累乘
a = torch.rand([8]) |
.argmax():返回最大元素的索引,该索引是tensor打平为1维的索引
.argmin():返回最小元素的索引,该索引是tensor打平为1维的索引
.argmax(dim=x):返回最大元素的索引,该索引是 x维度上 的索引
a = torch.rand([2,2,3]) |
keepdim=True :返回的tensor与原tensor维度一样
TOPK与K-TH
.topk(k,dim=x,largest=true): largest=true返回x维度上最大的k个值,largest=false返回x维度上最小的k个值,输出第一个参数为其值,第二个参数维其索引
a = torch.rand([4,4]) |
.kthvalue(k,dim=x):返回由小到大第k个值及其索引
a = torch.rand([4,4]) |
高阶操作
torch.where
torch.where(condition,x,y)→Tensor
$$
out_i=\begin{cases}x_i\ \ if\ condition_i\\y_i\ \ otherwise\end{cases}
$$
a = torch.zeros([4,4]) |
torch.gather
torch.gather(input,dim,index)→Tensor:根据将index的第dim维作为索引查取input中对应元素并生成Tensor输出
$$
input=\begin{bmatrix}cat\\dog\\fish\end{bmatrix}\ \ dim=0\ \ index=\begin{bmatrix}1\\2\\0\end{bmatrix}\Rightarrow\ \ out=\begin{bmatrix}dog\\fish\\cat\end{bmatrix}
$$
a=torch.rand(4,10) |