Numpy与Pytorch转换如何实现,有什么坑要注意
Admin 2022-07-19 群英技术资讯 420 次浏览
最近使用 Numpy包与Pytorch写神经网络时,经常需要两者彼此转换,故用此笔记记录码代码时踩(菜)过的坑,网上有人说:
Pytorch 又被称为 GPU 版的 Numpy,二者的许多功能都有良好的一一对应。
但在使用时还是得多多注意,一个不留神就陷入到了 一根烟一杯酒,一个Bug找一宿 的地步。
使用 torch.from_numpy() 转换,需要注意,两者共享内存。例子如下:
import torch import numpy as np a = np.array([1,2,3]) b = torch.from_numpy(a) np.add(a, 1, out=a) print('转换后a', a) print('转换后b', b) # 显示 转换后a [2 3 4] 转换后b tensor([2, 3, 4], dtype=torch.int32)
使用 .numpy() 转换,同样,两者共享内存。例子如下:
import torch import numpy as np a = torch.zeros((2, 3), dtype=torch.float) c = a.numpy() np.add(c, 1, out=c) print('a:', a) print('c:', c) # 结果 a: tensor([[1., 1., 1.], [1., 1., 1.]]) c: [[1. 1. 1.] [1. 1. 1.]]
需要注意的是,如果将程序中的 np.add(c, 1, out=c) 改成 c = c + 1 会发现两者貌似不共享内存了,其实不然,原因是后者相当于改变了 c 的存储地址。可以使用 id(c) 发现c的内存位置变了。
补充:pytorch中tensor数据和numpy数据转换中注意的一个问题
在pytorch中,把numpy.array数据转换到张量tensor数据的常用函数是torch.from_numpy(array)或者torch.Tensor(array),第一种函数更常用。
import numpy as np import torch a=np.arange(6,dtype=int).reshape(2,3) b=torch.from_numpy(a) c=torch.Tensor(a) a[0][0]=10 print(a,'\n',b,'\n',c) [[10 1 2] [ 3 4 5]] tensor([[10, 1, 2], [ 3, 4, 5]], dtype=torch.int32) tensor([[0., 1., 2.], [3., 4., 5.]]) c[0][0]=10 print(a,'\n',b,'\n',c) [[10 1 2] [ 3 4 5]] tensor([[10, 1, 2], [ 3, 4, 5]], dtype=torch.int32) tensor([[10., 1., 2.], [ 3., 4., 5.]]) print(b.type()) torch.IntTensor print(c.type()) torch.FloatTensor
可以看出修改数组a的元素值,张量b的元素值也改变了,但是张量c却不变。修改张量c的元素值,数组a和张量b的元素值都不变。
这说明torch.from_numpy(array)是做数组的浅拷贝,torch.Tensor(array)是做数组的深拷贝。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家介绍了caffe的python接口生成deploy文件学习以及用训练好的模型(caffemodel)来分类新的图片示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
Python编程语言中的 while 循环语句只要给定条件为真,则会重复执行的目标声明或语句。
使用matplotlib生成gif动画的方法相信大家应该都看到过,下面这篇文章主要给大家介绍了关于Python matplotlib包和gif包生成gif动画对比的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
大家好,本篇文章主要讲的是Python中引用传参四种方式介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
在写Python的时候经常会遇到时间格式的问题,首先就是最近用到的时间戳(timestamp)和时间字符串之间的转换。所谓时间戳,就是从 1970年1
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008