pytorch,AttributeError:“torch”模块没有“Tensor”属性

2024-03-28 14:39:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一台拥有CentOS Linux 7.3.1611(核心)操作系统的计算机上使用Python3.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'

我不能理解这个错误。。。当然,在Torch中,“Torch”有一个属性“Tensor”。同样的命令也适用于Torch。

我怎样才能解决这个问题?


Tags: 示例most核心linux计算机torchpytorchthis
2条回答

看起来笔记本是用python2运行的。
请参阅notebook file(在文本编辑器中打开)的metadata部分

 "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"
  }
 }


修复
一。确保安装了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"
  }
 }

您正在运行的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

因此,用python3.5 -m pip替换主页指令pip3python3.5也可以是Python二进制文件的完整路径。

请为最新版本使用正确的download.pytorch.orgURL。

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

同样,请注意,如果在本地目录中有一个__init__.py文件,它将成为一个常规包,并将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)>,而常规包使用), while a plain module uses

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

相关问题 更多 >