Numpy与Pytorch转换如何实现,有什么坑要注意
Admin 2022-07-19 群英技术资讯 1111 次浏览
很多朋友都对“Numpy与Pytorch转换如何实现,有什么坑要注意”的内容比较感兴趣,对此小编整理了相关的知识分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获,那么感兴趣的朋友就继续往下看吧!最近使用 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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
python的安全问题有哪些?本文就给大家来聊一聊python的安全问题,例如输入注入、assert 语句、计时攻击、临时文件等等这些都是什么安全问题呢?如何避免或解决?接下来我们具体的了解看看。
这篇文章主要为大家介绍了Python常用的内置函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
内容介绍一、概念介绍二、数据展示三、数据导入四、图像绘制五、树形结构总结一、概念介绍矩形树图(Treemap),即矩形式树状结构图,利用矩形的面积表示数值的大小,颜色用于类别区分,常用于呈现多类别的一
1、collections--基于Python自带的数据类型之上额外增加的几个数据类型fromcollectionsimport*在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict以及判断什么是可迭
Python语言有许多优点,常用于不同的领域,如数据科学、web开发、自动化运维等。本文将学习如何使用字符串中内置的方法来格式化字符串,感兴趣的可以了解一下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008