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。
我该如何解决这个问题?
【问题讨论】:
>>> help(torch)
or >>> torch
or >>> dir(torch)
等你比我们有更多信息
这里是:Help on package torch: NAME torch PACKAGE CONTENTS FILE (built-in) (END)
>>> torch <module 'torch' (namespace)>
>>> 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 pip
; python3.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
注意差异;上面的命名空间包使用<module 'name' (namespace)>
,而常规包使用)
, 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:所以torch
是0.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中修改内核版本:
或者直接修改<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"
【讨论】:
以上是关于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