pytorchの実践ではmodule'torch'has no attribute'form_numpy'問題の解決

2687 ワード

最近pytorchをじっくりプレイしてみましたが、バグが入っているのに気づくまで気づかなかったです.
torchの最も基本的な例をテストする場合、pytorchがnumpyをTensorに変換できないという問題に遭遇しました.
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 "", line 1, in 
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の方法でテストを行ったが、やはり合格した.
>>> b=torch.form_numpy(a)
Traceback (most recent call last):
  File "", line 1, in 
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の方式は信頼できない.
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

同時にこのような話を見て、pylinのツールがあることに気づいた.
そこでこのツールを再インストールします.
pip install pylint
それからテストしてみると、正常です.
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がこのパッケージに更新されていない可能性があります.