刘老师的torch教程是真的好地址
tensor:
-
矩阵 x , w x,w x,w之间 x ∗ w x*w x∗w与 t o r c h . m m ( x , w ) torch.mm(x,w) torch.mm(x,w)的区别:
*与torch.mul一样,torch.mm()是真正的矩阵乘法,具体见此pytorch矩阵乘法 -
自动求导:
只能是标量对标量,或者标量对向量/矩阵,不能矩阵对矩阵求导。tensor求导
epoch,batch_size和iteration
epoch是对整个训练样本训练多少次
在对训练样本进行一次训练时,我们每次取出batch_size个样本,总共取iteration次才能取完整个训练样本。比如说训练样本有5000个,我们设置的batch_size是100,那么iteration就是50
优化器
将要优化的参数传进去就行了,优化器梯度清零-计算loss-优化器更新参数:
import torch
x=torch.tensor(range(0,100))
y=3.5*x+6+torch.rand(100)/10
w=torch.tensor(1.0,requires_grad=True)
b=torch.tensor(1.0,requires_grad=True)
optimizer=torch.optim.SGD([w,b],lr=0.001)
for i in range(100):
y_pred=w*x+b
My_Loss=torch.nn.SmoothL1Loss()
loss=My_Loss(y,y_pred)
optimizer.zero_grad()
loss.backward()
optimizer.step()
tensor归一化
我今天遇到一个需求,需要按行对tensor进行二范数归一化:
from torch.nn.functional import normalize
使用normalize
函数进行处理,第一个参数是要处理的tensor,第二个参数指定是几范数归一化,第三个参数指定要按行还是按列归一化,默认为1按行归一化。
tensor类型转换
直接使用int(),float(),long()
等进行转换,比如:
a=torch.tensor([[1.,2.],[3.,4.]])
b=a.int()
pytorch 拼接tensor操作:
tmp=torch.cat([aggr_out,x],dim=1)
pytorch where 操作