はじめに
tensorflowで作成した深層学習モデルを学習させるときに,以下のようなエラーで学習ができず新たな仮想環境の構築を行なったのでまとめます.
Conv2DCustomBackpropInputOp only supports NHWC.
このエラーはおそらくCPU環境においてtensorflow2系でモデルの定義で data_format = "channels_first" 1とすると発生するもので,このエラーへの対処法は以下の二通りが考えられます.
- データ形状とモデルのdata_formatを全てchannels_lastにする
- tensorflowをダウングレードする
ここでは二つ目のtensorflowをダウングレードする方法について紹介します.
今回はWindowsのPython3の環境でtensorflowのバージョン1.8.0へのダウングレードを行います.
MacやLinuxでも似た流れで実行できると思います.
今回の流れ
今回の流れは以下の通りです.
- 現状の確認
- tensorflowのバージョン1.8.0に対応しているPython3系の調査
- 調査で判明したバージョンのPythonのインストール
- インストールしたPythonで仮想環境構築 (venv使用)
- tensorflowのバージョン1.8.0のインストール
現状の確認
とりあえずtensorflowのバージョン1.8.0のインストールを試みます.
$ pip install tensorflow==1.8.0
ERROR: could not find a version that satisfies the requirement tensorflow==1.8.0
(from versions: 2.5.0rc0, 2.5.0rc1, 2.5.0rc2, 2.5.0rc3, 2.5.0, 2.5.1, 2.5.2, 2.5.3, 2.6.0rc0, 2.6.0rc1,
2.6.0rc2, 2.6.0, 2.6.1, 2.6.2, 2.6.3, 2.7.0rc0, 2.7.0rc1, 2.7.0, 2.7.1, 2.8.0rc0, 2.8.0rc1, 2.8.0)
ERROR: no matching distribution found for tensorflow==1.8.0
$ python -V
Python 3.9.10
Python3.9においてtensorflowのバージョン1.8.0はインストールの候補になく,インストールすることができません.
そこでtensorflowのバージョン1.8.0に対応しているPythonを探すことから始めます.
tensorflowのバージョン1.8.0に対応しているPython3系の調査
まず https://pypi.org/ にアクセスして,検索欄で "tensorflow" と検索します.
検索すると以下の画像のように様々なパッケージが出てくるので,tensorflowに該当するもの(下の画像では一番上の tensorflow 2.8.0)をクリックします.
tensorflowのページが開いたら,左側の"Release history"をクリックします.
そうすると下の画像のようにtensorflowの様々なバージョンが一覧になって出てくるので,バージョン1.8.0を探してクリックします.
tensorflowのバージョン1.8.0のダウンロードファイルは下の画像になっています.
ここで下の画像の赤枠で示した部分に注目すると,これがtensorflowのバージョン1.8.0に対応しているPythonのバージョンを表しています.
下の画像ではcp27からcp36まで,つまりPython2.7とPython3.3からPython3.6までが対応しており,これらのPythonを導入する必要があるとわかります.
もし既に導入しているPythonがPython2.7かPython3.3からPython3.6までの場合はtensorflowのバージョン1.8.0のインストールに進んでください.
現在のPythonのバージョンは以下のコマンドで確認できます.
$ python3 -V
対応するPythonのインストール
前の調査でtensroflow1.8.0を使うためにはPython3系ではPython3.3からPython3.6が必要であることが分かったので,Python3.6のインストールを行います.
まず https://www.python.org/downloads/windows/ にアクセスして,Python3.6を探します.
Windows向けのインストーラが用意されている中で最も新しいPython3.6が3.6.8だったので,下の画像の赤枠の "Download Windows x86-64 executable installer" をクリックしてインストールを行います.
インストールの際にインストールを行う場所をメモしておいてください.
通常は以下の場所にインストールされると思います. (usernameは適宜変更してください.)
$ C:\Users\username\AppData\Local\Programs\Python\Python36
インストールしたPythonで仮想環境構築
様々なパッケージをルート環境にインストールすると,パッケージの依存関係でパッケージが正常に動作しなくなることがあるので,仮想環境を作成して作業を行うのが良いと思います.
Pythonで仮想環境を構築する方法として,ここではvenvを用いて仮想環境構築を行います.
ここからの操作はWindowsのコマンドプロンプトで実行します.
venvはPython3.6では標準で使用可能な仮想環境作成コマンドで,以下のコマンドで仮想環境を構築することができます.
ここで作成する仮想環境名を myenv,仮想環境を構築するフォルダの絶対パスを C:\Users\username\myenv とします.
仮想環境名と絶対パスは適宜変更してください.
$ C:\Users\username\AppData\Local\Programs\Python\Python36\python -m venv C:\Users\username\myenv
これで仮想環境を構築できたので,以下のコマンドで仮想環境を実行します.
$ C:\Users\username\myenv\Scripts\activate
上記のコマンドを実行し,以下のように今いる絶対パスの前に (myenv) が付いていれば,仮想環境の実行ができています.
(myenv) C:\Users\username>
ここで念のために仮想環境内のPythonのバージョン確認を行います.
実行結果が以下のようになっていれば問題ありません.
(myenv) C:\Users\username> python -V
Python 3.6.8
仮想環境を終了するときは以下のコマンドで終了できます.
(myenv) C:\Users\username> deactivate
tensorflowのバージョン1.8.0のインストール
tensorflowのバージョン1.8.0をインストールする場合は以下のコマンドでインストールできます.
(myenv) C:\Users\username> pip install tensorflow==1.8.0
tensorflowがバージョン1.8.0でインストールできているかは以下のコマンドで検証できます.
(myenv) C:\Users\username> python
>>> import tensorflow
>>> print(tensorflow.__version__)
1.8.0
最後に
ここではtensorflowのバージョン1.8.0のインストールに関して扱いましたが,他のバージョンについても同様の方法で環境構築が可能だと思います.
参考資料
- venvに関するPythonの資料 https://docs.python.org/ja/3/library/venv.html
-
channels_firstとは,tensorflowでのデータの形状を表します.channels_firstはデータの形状がNCHW(ミニバッチのデータ数,チャンネル,高さ,幅)の順に並んでいます.一方,channels_lastはNHWC(ミニバッチのデータ数,高さ,幅,チャンネル)の順に並んだデータ形状を指します.TensorFlowのデフォルトのデータ形状はchannels_lastです. ↩