torch随手记录

Tensor

最基础的操作对象;可以在GPU上使用,可以追踪计算图和计算梯度,Numpy的计算无法像Tensor一样在GPU上加速

属性/方法 描述
grad tensor的梯度属性,默认为None,当第一次为当前张量计算梯度调用backward方法时,grad将变成一个Tensor类型
backward() 根据当前调用backword()的Tensor往前计算梯度,调用backward()的Tensor需要为Scaler,想要调用backward(),要保证当前Tensor所包含的变量运算过程中存在requires_grad=True的Tensor(不然你把什么当作变量求导呢?)
detach() 阻断反向梯度传播,当我们训练网络时,可能希望只对网络的一部分参数进行调整,或者只训练部分网络,并不让其梯度对主网络的梯度造成影响,这时就可以用detach
gather() 每行/列取数

Loss

假设是预测值和真实值之间的数值差异,常用的L1Loss,L2Loss和SmoothL1Loss定义为: 上述三个损失函数对的导数分别为:

  • 损失函数对的导数为常数,在训练后期,很小的时候,如果learning rate不变,损失函数会在稳定值附近波动,很难收敛到更高的精度
  • 损失函数对的导数在很大时,其导数也很大,在训练初期不稳定
  • 避开了上述两点