torch基本操作

代码文件ndarray.ipynb

torch.

  • arrange()
  • shape()
  • numel():张量元素个数
  • reshape()
  • zeros(),ones(),randn(),ones_like(),zeros_like()
  • torch.tensor():主动生成张量
  • .cat((X,Y),dim=0):连接两个张量,0和1代表行和列

运算符

  • 针对相同维度的张量,+,-,*,/,**,.exp()
  • 如果维度不同使用上诉运算,那么由于广播机制,会扩大成相同且更大的维数

节省内存

  • 如果直接Y=X,那么两个变量的id是不一样的,类似C++的指针
  • 可以用切片赋值,id则一样,即Y[:]=X
  • 也可以用X += Y,也会使id一样

转换对象

  • 使用X.numpy()torch.tensor(A)可以互相转换(numpy.ndarray, torch.Tensor)
  • 请注意生成大小为1的张量是tensor([3.5000])形式,要转换成标量请用.item()或者直接float()int()

pandas数据预处理

数据预处理pandas.ipynb

  • pd.get_dummies(inputs, dummy_na=True):one-hot编码,dummy_na=True代表na值也算

线性代数

线性代数linear_algebra.ipynb1

  • len()访问的是张量长度
  • A.clone(B),通过分配新内存,将A的一个副本分配给B
  • A*B矩阵按元素乘法称为Hadamard积(Hadamard product)(数学符号$\odot$)
  • A.sum(axis=1, keepdims=True)是全部和返回tensor()。可以加axis=0keepdims用于保持维数,防止降成向量,之后可用于广播机制
  • A.cusum(axis=0)

向量点积

  • torch.dot(x,y)

矩阵向量积

  • torch.mv(A, x)

矩阵乘法

  • torch.mm(A, B)

范数

  • 可用于向量矩阵,向量2范数torch.norm(a,2),矩阵Frobenius范数torch.norm(torch.ones((4, 9)))

自动微分

自动微分autograd.ipynb
需要之后慢慢理解

简单例子

  • x.requires_grad_(True),用来存梯度,之后算梯度时y.backward()可以进行用x.grad访问。另外x.grad.zero_()可以用于梯度清0,否则会累积梯度
  • y.detach()将其常数化,用于固定参数