动手深度学习(一)-预备知识
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所有,如有转载,请注明來自原作者