动手深度学习(一)-预备知识
torch基本操作
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数据预处理
pd.get_dummies(inputs, dummy_na=True):one-hot编码,dummy_na=True代表na值也算
线性代数
len()访问的是张量长度A.clone(B),通过分配新内存,将A的一个副本分配给BA*B矩阵按元素乘法称为Hadamard积(Hadamard product)(数学符号$\odot$)A.sum(axis=1, keepdims=True)是全部和返回tensor()。可以加axis=0。keepdims用于保持维数,防止降成向量,之后可用于广播机制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()将其常数化,用于固定参数
此文章版权归yangzhi所有,如有转载,请注明來自原作者




