【问题标题】:pytorch, AttributeError: module 'torch' has no attribute 'Tensor'pytorch,AttributeError:模块“火炬”没有属性“张量”
【发布时间】: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 库来检查哪里出了问题

标签: python python-3.5 centos7 torch pytorch


【解决方案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 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"
        }
       }
      


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

      【讨论】:

        猜你喜欢
        • 2018-10-10
        • 2023-04-04
        • 2021-05-13
        • 1970-01-01
        • 2021-12-23
        • 2018-11-19
        • 2020-02-09
        • 2021-01-31
        相关资源
        最近更新 更多