前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytorch实践中module 'torch' has no attribute 'form_numpy'问题的解决

pytorch实践中module 'torch' has no attribute 'form_numpy'问题的解决

作者头像
sparkexpert
发布2018-01-09 11:31:04
7.9K0
发布2018-01-09 11:31:04
举报

最近开始仔细玩了一下pytorch,发现里面有个BUG之前都没有发现。

在测试torch最基本的示例的情况下,居然碰到了个pytorch无法转化numpy为Tensor的问题,呈现的问题如下:

代码语言:javascript
复制
ndscbigdata@ndscbigdata:~/work/change/AI$ python
Python 3.6.1 (default, Jul 14 2017, 17:08:44) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> import numpy as np
>>> a = np.ones(5)
>>> a
array([ 1.,  1.,  1.,  1.,  1.])
>>> b=torch.form_numpy(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'torch' has no attribute 'form_numpy'
>>> print(torch.__version__)
0.2.0_3

关于这个问题,很难查找网上对应的解决办法。因此将此问题的解决办法写下来。

在torch的主页上有这样一句话,经过仔细分析才明白其中的意思:

Pylint isn't picking up that torch has the member function from_numpy. It's because torch.from_numpy is actually torch._C.from_numpy as far as Pylint is concerned.

本身而言,pytorch并不直接包含from_numpy这个方法,而需要通过_C这样的命名空间来调用。

因此利用._C的办法进行测试,果然顺利通过。

代码语言:javascript
复制
>>> b=torch.form_numpy(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'torch' has no attribute 'form_numpy'
>>> print(torch.__version__)
0.2.0_3
>>> c = torch.Tensor(3,3)
>>> c

1.00000e-32 *
 -4.4495  0.0000  0.0000
  0.0000  0.0000  0.0000
  0.0000  0.0000  0.0000
[torch.FloatTensor of size 3x3]

>>> b = torch._C.from_numpy(a)
>>> b

 1
 1
 1
 1
 1
[torch.DoubleTensor of size 5]

那么在代码中大部分都是直接torch.from_numpy的方法,直接每个代码添加._C的方式并不可靠。

代码语言:javascript
复制
For reference, you can have Pylint ignore these by wrapping "problematic" calls with the following comments.

# pylint: disable=E1101
tensor = torch.from_numpy(np_array)
# pylint: enable=E1101

同时又看到这样的一段话,才发现有个pylint的工具。

于是重新再次安装一下这个工具。

代码语言:javascript
复制
pip install pylint

然后再测试一下,发现就正常了。

代码语言:javascript
复制
ndscbigdata@ndscbigdata:~/work/change/AI$ python
Python 3.6.1 (default, Jul 14 2017, 17:08:44) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> import numpy as np
>>> a = np.ones(5)
>>> b=torch.from_numpy(a)
>>> b

 1
 1
 1
 1
 1
[torch.DoubleTensor of size 5]

>>> 

分析一下原因,可能是由于pytorch安装的时间比pylint较晚,因此之前的pylint没有更新到这个包。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年09月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档