189 8069 5689

pytorch中.data与.detach()有什么区别

小编给大家分享一下pytorch中.data与.detach()有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

从策划到设计制作,每一步都追求做到细腻,制作可持续发展的企业网站。为客户提供成都网站制作、成都网站设计、外贸营销网站建设、网站策划、网页设计、国际域名空间、网页空间、网络营销、VI设计、 网站改版、漏洞修补等服务。为客户提供更好的一站式互联网解决方案,以客户的口碑塑造优易品牌,携手广大客户,共同发展进步。

        众所周知,pytorch里一个tensor默认是有两个属性的,一个是data一个是grid。 但这里的data也是tensor。有的时候我们不想管梯度grid的事,所以用.data来提取这里的data。

a = torch.tensor([1,2,3.], requires_grad = True)
out = a.sigmoid()
c = out.data  # 需要走注意的是,通过.data “分离”得到的的变量会和原来的变量共用同样的数据,而且新分离得到的张量是不可求导的,c发生了变化,原来的张量也会发生变化
c.zero_()     # 改变c的值,原来的out也会改变

        tensor .data 返回和 x 的相同数据 tensor,而且这个新的tensor和原来的tensor是共用数据的,一者改变,另一者也会跟着改变,而且新分离得到的tensor的require s_grad = False, 即不可求导的。(这一点其实detach是一样的)  

        除了.data,pytorch还提供了.detach()来实现相同的操作。不管grid的事,只提取data,可以用.detach()。而且我们更推荐使用.detach()。

a = torch.tensor([1,2,3.], requires_grad = True)
out = a.sigmoid()
c = out.detach()  # 需要走注意的是,通过.detach() “分离”得到的的变量会和原来的变量共用同样的数据,而且新分离得到的张量是不可求导的,c发生了变化,原来的张量也会发生变化
c.zero_()     # 改变c的值,原来的out也会改变

        tensor .detach() 返回和 x 的相同数据 tensor,而且这个新的tensor和原来的tensor是共用数据的,一者改变,另一者也会跟着改变,而且新分离得到的tensor的require s_grad = False, 即不可求导的。(这一点其实 .data是一样的)

        那么哪里不一样呢?为什么更推荐用.datach()呢?

        举个例子,上面的out包含着data,也包含着grid。现在我不想管梯度的事,所以可以用out.data来把纯种tensor提取出来,此时的out.data也就是c已经没有梯度这个东西了。可我c.zero_()修改了out的值,这时再bp竟然会成功!没有梯度了竟然能bp!所以.data是有缺点的。而.detach()是没有这个问题的,所以建议用.datach()。

以上是“pytorch中.data与.detach()有什么区别”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


当前文章:pytorch中.data与.detach()有什么区别
网址分享:http://jkwzsj.com/article/peejis.html

其他资讯