Pytorch中.data与.detach()的区别和作用

在Pytorch中,创建模型和数据运算传递时,经常会使用到tensor.data和tensor.detach(),对于这两种使用方式,都是对Variable中的tensor进行处理,但是都不进行梯度计算和被进行梯度跟踪,即requires_grad=False,简单来说,他们的区别如下:

相同点

两者都和原数据共享同一块数据;
都和原来数据的计算历史无关;
requires_grad = False;


不同点

detach会进行提示,相比data更安全,在使用in-place操作后,会修改原数据的值,而如果在反向传播过程中使用到原数据会导致计算错误,而使用.detach就会报错。
 

在量化时的应用

在进行图像压缩或者其他需要对数据进行量化时,.data与.detach()的作用就很明显了,因为通常量化是不可导的,所以在整个模型的训练过程中,需要forward时量化取整,backward时梯度回传,就需要.data或者.detach()来实现了,forward时使用.data或者.detach,不进行梯度计算和梯度跟踪,软量化(为了使量化可导而使用逼近量化的可导函数)使用正常的tensor操作即可实现量化的同时,还能进行梯度回传。

 例如:

# y是需要量化的一个tensor
y = y - alpha * F.sin(2 * np.pi * y) / (2 * np.pi) #软量化,需要求导和梯度跟踪
y.data = torch.round(y.data) # 量化,此处不求梯(不进行梯度跟踪)

参考文献

1. https://blog.csdn.net/qq_36530992/article/details/102822640

2.https://zhuanlan.zhihu.com/p/38475183

 

 

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值