web-dev-qa-db-ja.com

pytorch、AttributeError:モジュール「torch」には属性「Tensor」がありません

私はPython 3.5.1で作業していますCentOS Linux 7.3.1611(コア)オペレーティングシステム。

私はPyTorchを使用しようとしていますが、 このチュートリアル で始めています。

残念ながら、この例の4行目では問題が発生します。

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

私はこのエラーを理解することはできません...もちろんトーチでは、「トーチ」には属性「テンソル」があります。同じコマンドがトーチでも機能します。

この問題を解決するにはどうすればよいですか?

14
DavideChicco.it

実行しているPythonバイナリには、torchがインストールされていません。 doesモジュール検索パスに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バイナリにトーチを正しくインストールする必要があります。 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__)を使用してください。

繰り返しますが、doがローカル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_ `を使用します。

そのようなパッケージとモジュール(名前空間パッケージではない)が最初に検出され、検索が停止します。見つかったパッケージまたはモジュールが必要なものではない場合、それらを脇に移動するか、名前を変更する必要があります。

12
Martijn Pieters

ノートブックはpython2で実行されているようです。
ノートブックファイル (テキストエディターで開く)の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"
  }
 }


[〜#〜] fix [〜#〜]
1。 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"
  }
 }
0
stacksonstacks