pytorch,AttributeError:模块"torch"没有属性"Tensor" [英] pytorch, AttributeError: module 'torch' has no attribute 'Tensor'

查看:596
本文介绍了pytorch,AttributeError:模块"torch"没有属性"Tensor"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm working with Python 3.5.1 on a computer having CentOS Linux 7.3.1611 (Core) operating system.

我正在尝试使用 PyTorch ,并且开始使用

I'm trying to use PyTorch and I'm getting started with this tutorial.

不幸的是,该示例的第4行造成了麻烦:

Unfortunately, the #4 line of the example creates troubles:

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

我无法理解此错误...当然在Torch中,"torch"确实具有属性"Tensor".相同的命令在Torch中也有效.

I cannot understand this error... of course in Torch the 'torch' does have an attribute 'Tensor'. The same command works in Torch.

我该如何解决这个问题?

How can I solve this problem?

推荐答案

您正在运行的Python二进制文件未安装 torch .它在模块搜索路径上确实有一个名为 torch 的目录,并且被视为

The Python binary that you are running does not have torch installed. It does have a directory named torch on the module search path, and it is treated as a 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模块或软件包在搜索路径上其他任何地方找到.

Any directory without a __init__.py file present in it, located on your module search path, will be treated as a namespace, provided no other Python modules or packages by that name are found anywhere else along the search path.

这意味着,如果为您的Python二进制文件安装了 torch ,则是否存在本地 torch 目录都没关系:

This means that if torch was installed for your Python binary, it doesn't matter if there is a local torch directory:

$ 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会优先考虑顶级模块和包.

The above shows that sys.path lists the torch directory first, followed by additional_path/torch, but the latter is loaded as the torch module when you try to import it. That's because Python gives priority to top-level modules and packages before loading a namespace package.

您需要为当前的Python二进制文件正确安装割炬,请参见项目主页;当使用 pip 时,您可能想将Python二进制文件与 -m 开关一起使用:

You need to install torch correctly for your current Python binary, see the project homepage; when using pip you may want to use the Python binary with the -m switch instead:

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二进制文件的完整路径.

So replace the pip3 the homepage instructions use with python3.5 -m pip; python3.5 can also be the full path to your Python binary.

请使用正确的 download.pytorch.org URL作为最新版本.

Do use the correct download.pytorch.org URL for the latest version.

您不必将目录移到一边,但是如果您确实想知道并且不知道目录位于何处,请使用如上所示的 print(torch .__ path __)

You don't have to move the directory aside, but if you do want to and don't know where it is located, use print(torch.__path__) as I've shown above.

同样,请注意,如果 do 在本地 torch 目录中有一个 __ init __.py 文件,它将成为常规软件包,并且将将 pip 安装的软件包屏蔽到正常的 site-packages 位置.如果您有这样的程序包,或本地的 torch.py​​ 单文件模块,则需要重命名它们.在这种情况下,诊断信息看起来有所不同:

Again, note that if you do have an __init__.py file in a local torch directory, it becomes a regular package and it'll mask packages installed by pip into the normal site-packages location. If you have such a package, or a local torch.py single-file module, you need to rename those. The diagnostic information looks different in that case:

$ 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

注意差异;上面的名称空间包使用<模块'name'(namespace)> ,而常规包使用) ,而普通模块使用`.

Note the differences; a namespace package, above, uses <module 'name' (namespace)>, while a regular package uses ), while a plain module uses`.

首先找到此类软件包和模块(不是名称空间软件包),然后停止搜索.如果找到的包或模块不是您想要的,则需要将它们移到一边或重命名.

Such packages and modules (not namespace packages) are found first and stop the search. If the found package or module is not the one you wanted, you need to move them aside or rename them.

这篇关于pytorch,AttributeError:模块"torch"没有属性"Tensor"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆