pytorch,AttributeError:模块“火炬”没有属性“张量”

Posted

技术标签:

【中文标题】pytorch,AttributeError:模块“火炬”没有属性“张量”【英文标题】:pytorch, AttributeError: module 'torch' has no attribute 'Tensor' 【发布时间】:2018-04-29 06:03:47 【问题描述】:

我在具有 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'

我无法理解这个错误......当然,在 Torch 中,“火炬”确实具有“张量”属性。同样的命令也适用于 Torch。

我该如何解决这个问题?

【问题讨论】:

&gt;&gt;&gt; help(torch) or &gt;&gt;&gt; torch or &gt;&gt;&gt; dir(torch)等你比我们有更多信息 这里是:Help on package torch: NAME torch PACKAGE CONTENTS FILE (built-in) (END) &gt;&gt;&gt; torch &lt;module 'torch' (namespace)&gt; &gt;&gt;&gt; dir(torch); ['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__'] 尝试进入你的 python 文件夹并找到 torch 库来检查哪里出了问题 【参考方案1】:

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

【讨论】:

【参考方案2】:

我遇到了类似的问题。 只需在新的 conda 环境中安装 pytorch。它会工作 如果您想在 jupyter notebook 上工作,您可能需要再次在新的 conda 环境中安装 jupyter。

【讨论】:

这个答案需要更多细节。建议您至少包含您的 python 版本和操作系统版本【参考方案3】:

我遇到了同样的问题,一个 .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__). 

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

【讨论】:

【参考方案4】:

您正在运行的 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 时,您可能希望使用带有 -m 开关的 Python 二进制文件:

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 pippython3.5 也可以是 Python 二进制文件的完整路径。

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

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

再次,请注意,如果您确实在本地 torch 目录中有一个 __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

注意差异;上面的命名空间包使用&lt;module 'name' (namespace)&gt;,而常规包使用), while a plain module uses`。

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

【讨论】:

谢谢,但它不起作用。我遵循了您的所有步骤,但没有任何改变。其他想法? @DavideChicco 你能用你的输出创建一个馅饼或要点,这样我们就可以诊断出可能出了什么问题? python3.5 -m pip freeze 是否列出了火炬? 这是python3.5 -m -pip freeze的输出:python3.5 -m pip freeze numexpr==2.6.1 numpy==1.11.1 olefile==0.44 pandas==0.18.1 Pillow==4.3.0 python-dateutil==2.5.3 pytz==2016.6.1 PyYAML==3.12 scikit-learn==0.17.1 scipy==0.17.1 six==1.10.0 tables==3.2.3.1 torch==0.2.0.post3 torchvision==0.1.9 @DavideChicco.it:所以torch0.2.0.post3 的版本。 python3.5 -c 'import torch' 是否仍然会在您的问题中产生回溯? python3.5 -c 'import torch' 工作正常。 Python3.5 shell 中的import torch 也可以正常工作。任何想法?谢谢【参考方案5】:

看起来笔记本正在运行 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"
  
 

修复 1. 确保安装了 ipython/jupyter 的 python3.5 内核:python3.5 -m ipykernel install --name python3.5.1 2. 运行jupyter notebook,在notebook中修改内核版本:

或者直接修改&lt;notebook.ipynb&gt;(不推荐):

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

【讨论】:

以上是关于pytorch,AttributeError:模块“火炬”没有属性“张量”的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:“str”对象在 pytorch 中没有属性“dim”

AttributeError:当向 Pytorch LSTM 网络提供输入时,“元组”对象没有属性“dim”

pytorch版本问题:AttributeError: 'module' object has no attribute '_rebuild_tensor_v2'(示例

Pytorch Text AttributeError:“BucketIterator”对象没有属性

Unpickling 保存的 pytorch 模型会引发 AttributeError: Can't get attribute 'Net' on <module '__main__' 尽管内联

pytorch tensorboardX可视化问题:AttributeError: 'torch._C.Value' object has no attribute 'debu