pytorch,AttributeError:module' torch'没有属性' Tensor'

时间:2017-11-15 21:00:00

标签: python python-3.5 centos7 torch pytorch

我在拥有 CentOS Linux 7.3.1611 (核心)操作系统的计算机上使用 Python 3.5.1

我尝试使用 PyTorch ,我开始使用this tutorial

不幸的是,该示例的#4行会产生麻烦:

>>> torch.Tensor(5, 3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'torch' has no attribute 'Tensor'

我无法理解这个错误......当然,在火炬手中,火炬手也是如此。确实有一个属性&#39; Tensor&#39;。同样的命令在Torch中有效。

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:12)

您运行的Python二进制文件没有安装torch 在模块搜索路径上有一个名为torch的目录,它被视为namespace package

$ pwd
/some/path
$ python3 -c 'import torch; print(torch); print(torch.__path__)'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'torch'
$ mkdir torch
$ python3 -c 'import torch; print(torch); print(torch.__path__)'
<module 'torch' (namespace)>
_NamespacePath(['/some/path/torch'])

位于模块搜索路径上的任何没有__init__.py文件的目录都将被视为命名空间,前提是没有找到其他Python模块或包名称搜索路径上的任何其他地方。

这意味着如果为您的Python二进制文件安装了torch,那么是否存在本地torch目录并不重要:

$ ls -ld torch/
drwxr-xr-x  2 mjpieters users  68 Nov 23 13:57 torch/
$ mkdir -p additional_path/torch/
$ touch additional_path/torch/__init__.py
$ PYTHONPATH="./additional_path" python3 -c 'import os.path as p, sys; print(*(t for t in (p.join(e, "torch") for e in sys.path) if p.exists(t)), sep="\n")'
torch
/some/path/additional_path/torch
$ PYTHONPATH="./additional_path" python3 -c 'import torch; print(torch); print(torch.__path__)'
<module 'torch' from '/some/path/additional_path/torch/__init__.py'>
['/some/path/additional_path/torch']

上面显示sys.path首先列出torch目录,然后是additional_path/torch,但后者在您尝试导入时会加载为torch模块。这是因为Python在加载命名空间包之前优先考虑顶级模块和包。

您需要为当前的Python二进制文件正确安装Torch,请参阅project homepage;使用pip时,您可能希望将Python二进制文件与-m开关一起使用:

python3.5 -m pip install http://download.pytorch.org/whl/cu80/torch-0.2.0.post3-cp35-cp35m-manylinux1_x86_64.whl 
python3.5 -m pip install torchvision

所以将pip3主页说明替换为python3.5 -m pip; python3.5也可以是Python二进制文件的完整路径。

请使用正确的download.pytorch.org网址获取最新版本。

您不必将目录移到一边,但如果您确实想要并且不知道它的位置,请使用上面显示的print(torch.__path__)

再次注意,如果你在本地__init__.py目录中有一个torch文件,它就会变成一个常规包,并且它将掩盖由{{{{}}安装的包。 1}}进入正常的pip位置。如果您有这样的包或本地site-packages单文件模块,则需要重命名它们。在这种情况下,诊断信息看起来不同:

torch.py

注意差异;上面的命名空间包使用$ pwd /some/path $ python3 -c 'import torch; print(torch); print(torch.__path__)' Traceback (most recent call last): File "<string>", line 1, in <module> ModuleNotFoundError: No module named 'torch' $ mkdir torch $ touch torch/__init__.py # make it a package $ python3 -c 'import torch; print(torch); print(torch.__path__)' <module 'torch' from '/some/path/torch/__init__.py'> ['/some/path/torch'] $ rm -rf torch/ $ touch torch.py # make it a module $ python3 -c 'import torch; print(torch); print(torch.__file__)' <module 'torch' from '/some/path/torch.py'> /some/path/torch.py ,而常规包使用<module 'name' (namespace)> )`。

首先找到此类包和模块(不是命名空间包)并停止搜索。如果找到的包或模块不是您想要的那个,则需要将它们移到一边或重命名它们。

答案 1 :(得分:0)

看起来笔记本正在使用python2运行 请参阅notebook filemetadata部分(在文本编辑器中打开)

 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 }


FIX
1.确保安装了ipython / jupyter的python3.5内核:
python3.5 -m ipykernel install --name python3.5.1

2.运行jupyter notebook并更改笔记本中的内核版本:
enter image description here



或者直接编辑<notebook.ipynb>(不推荐):

 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.5.1",
   "language": "python",
   "name": "python3.5.1"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.1"
  }
 }

答案 2 :(得分:0)

我面临类似的问题。 只需在新的conda环境中安装pytorch。会工作的 如果要在jupyter笔记本上工作,可能必须再次在新的conda环境中安装jupyter。

答案 3 :(得分:0)

我在笔记本中安装 pytorch 模块时遇到了类似的问题。我不得不重新启动我的 Jupyter Notebook 内核,这为我解决了这个问题。

答案 4 :(得分:-1)

我遇到了同样的问题,一个.py正常工作,另一个报告此错误。 尝试运行以下命令:

import torch
print(torch.__path__)
If (you get a wrong path): 
  then you know what you need to do.
Else if (even can not get the path printed): 
  just remove the temp file of your IDE(.idea or __pycache__). 

我不知道为什么,但是它对我有用。希望对您有所帮助。