numpy中copy和view的区别,以及torch中clone,detach,copy_的区别

numpy中copy和view的区别

(1)a = b 完全不复制,a、b是同一个ndarry对象的两个不同名字而已
(2)a = b.view() 视图与浅拷贝,共享一个数据,指向同一片内存,数据改变会相互影响(无需额外的空间)
(3)深复制 copy() ,不仅创建新的对象,而且实现了对内存数据的拷贝,不共享内存

torch中clone,detach,copy_的区别

(1)clone返回一个和张量同源桶shape同dtype和device的张量,与源数据不共享数据内存,但提供梯度回溯
(2)detach与clone完全不同。detach返回的数据与源数据共享数据内存,但不提供梯度计算,脱离了计算图
(3)clone和detach的联合使用,只做简单的数据复制,既不数据共享,也不对梯度共享,从此两个张量无关联
(4)copy_与clone是一样的,唯一的不同是调用写法不同
(5)x.data与x.detach相同,共享一块数据,与计算历史无关,不同点:x.data在梯度计算阶段要用到的张量上不安全。

posted @ 2021-09-10 15:39  爱吃西瓜的菜鸟  阅读(429)  评论(0编辑  收藏  举报