はじめに
本書では、10章のディープラーニングの演習のためにkerasというライブラリとTheanoというバックエンドを組み合わせて用いました。kerasと組み合わせることができるバックエンドは他にもGoogleのTensorFlowなどがあることを書籍で紹介しましたが、執筆当時TensorFlowはインストールがやや難しいため、本書では用いませんでした。
しかし 2018年8月、TensorFlowのバージョン1.9.0がRaspberry Piを正式にサポートしたことにより、Raspberry PiでTensorFlowを用いることができるようになりました。それにより、本書の10章のプログラムを TensorFlow で実行することが一時的に容易になったのです。
とは言え、この分野は進歩のスピードが速く、状況は常に変わっています。2023年現在、TensorFlow バージョン 2 の Raspberry Pi の公式なサポートはなく、有志の方がビルドしてくださった TensorFlow を利用させて頂いております。
また、ディープラーニングのライブラリのトレンドは TensorFlow から Facebook により開発された PyTorch (パイトーチ) に移り、一方 Google は TensorFlow とは別に jax/flax という数値計算およびディープラーニングのライブラリの開発を始めています。
このように、進歩の激しい分野で最新のツールを追いかけることはなかなか難しいことです。
本ページは、本書 10 章の演習を keras + TensorFlow で実行する方法を解説します。
上で述べたようにライブラリ(すなわちツール)のトレンドは移り変わるものですから、TensorFlow で実行すること自体が重要だというわけではありません。 しかし、2023年10月、Raspberry Pi OS の最新版 Bookworm では、これまで 5 年間用いてきた keras + Theano が動作しなくなってしまいました。 Bookworm で 10 章の演習を実行するには本ページの方法が唯一の方法となってしまったのです。ただし、64-bit 版 OS 限定の方法であることはご了承ください。
状況を整理すると下記の通りです。
OS | TensorFlow | keras + Theano |
Raspberry Pi OS Bookworm 32-bit | × | × |
Raspberry Pi OS Bookworm 64-bit | 〇 (ver2) | × |
Raspberry Pi OS Bullseye 32-bit | × | 〇 |
Raspberry Pi OS Bullseye 64-bit | 〇 (ver2) | 〇 |
Raspberry Pi OS Buster 32-bit | 〇 (ver1, 2) | 〇 |
何が変わるのか?
まず、TensorFlowの実行方法を解説する前に、TheanoからTensorFlowに変えることで何が変わるのかをあらかじめ紹介しておきましょう。[性能]
- TheanoからTensorFlowに変えても、計算を担うライブラリが変わるだけですから、機械学習の性能は変化しません
[プログラム全般に関して]
- Theanoでは、プログラムの初回実行時にコンパイルという作業が行われるため、Raspberry Piで5分程度の時間がかかりました。TensorFlowではこれがなくなり、速やかに計算が始まります
[学習用プログラムに関して]
- 学習用プログラム(ml-10-01-iris-deep-learn.py、ml-10-03-digits-cnn-learn.py、ml-10-07-hand-cnn-learn.pyの3つ)をRaspberry Pi 2~4で実行すると、マルチコアのプロセッサが有効に使われるため、プログラムの実行時間が短くなります。特に、Raspberry Pi 4 ではかなり高速に学習が終了します(あくまで本書執筆時に用いた Theano による結果と比べれば、ですが)。ただし、結果確認用プログラムではその効果はありません。また、シングルコアのRaspberry Pi 1 やRaspberry Pi Zeroでもその効果はありません。
[その他の注意]
- TensorFlowをインストールすると、ベクトル計算用のライブラリNumPyがアップグレードされることで、プログラム実行時にライブラリ間のバージョンの組合せに起因する警告(FutureWarningやRuntimeWarningなどのWarning)がでることがあります。Warningはエラーではありませんから、当面は気にしなくても良いのですが、気になる方は気になるでしょう。
以下の流れ
さて、本ページでは以下の流れにそって解説していきます。自分の該当する部分をご覧ください。- TensorFlow 2 系のインストール方法 (Bookworm 64-bit 版のみ)
- TensorFlow 2 系のインストール方法 (Bullseye 64-bit 版のみ)
- TensorFlow 2 系のインストール方法 (Busterまで)
- TensorFlow 1 系のインストール方法 (Busterまで)
TensorFlow 2 系のインストール方法 (Bookworm 64-bit 版のみ)
Raspberry Pi OS Bullseye 64-bit 版で、TensorFlow 2 系のパッケージをインストールするには、以下の8個のコマンドを順に実行します。 PINTO0309 (Katsuya Hyodo) さんのビルドした TensorFlow 2.12 の 64-bit 版がインストールされます。sudo apt install libhdf5-dev libc-ares-dev libeigen3-dev gcc gfortran libgfortran5 libatlas3-base libatlas-base-dev libopenblas-dev libblas-dev liblapack-dev cython3 libatlas-base-dev openmpi-bin libopenmpi-dev python3-dev python3-h5py sudo pip3 install keras_applications==1.0.8 --no-deps --break-system-packages sudo pip3 install keras_preprocessing==1.1.2 --no-deps --break-system-packages sudo pip3 install numpy==1.24.4 --break-system-packages sudo pip3 install pybind11==2.9.2 --break-system-packages pip3 install -U --user six wheel mock --break-system-packages wget https://github.com/PINTO0309/Tensorflow-bin/releases/download/v2.12.0rc0/tensorflow-2.12.0rc0-cp311-none-linux_aarch64.whl sudo -H pip3 install tensorflow-2.12.0rc0-cp311-none-linux_aarch64.whl --break-system-packages全てのコマンドが無事終了すれば インストールは終わりです。なお、TensorFlow 2.3 以降では keras は TensorFlow 専用となっていますので、.keras/keras.json による設定は必要ありません。
インストール終了後、カメラを用いない演習は、本書のサンプルファイルをそのまま利用できます。
カメラを用いた演習を行う場合、本書のサンプルプログラムがそのまま動作するわけではなく、対応済ファイルを別途ダウンロードして利用することになります。 「本書の演習を picamera2 (libcamera) で実行する方法」で配布しているサンプルファイルを利用してください。なお、2023年1月に発売された Camera Module v.3 はこの手法でしか使えません。
TensorFlow 2 系のインストール方法 (Bullseye 64-bit 版のみ)
Raspberry Pi OS Bullseye 64-bit 版で、TensorFlow 2 系のパッケージをインストールするには、以下の11個のコマンドを順に実行します。 PINTO0309 (Katsuya Hyodo) さんのビルドした TensorFlow 2.9 の 64-bit 版がインストールされます。なお、下記のコマンドを実行すると、numpy のバージョンが新しくなる関係で theano が動作しなくなりますのでご了承ください。
sudo apt install libc-ares-dev libeigen3-dev gfortran libopenblas-dev libopenblas-base cython3 openmpi-bin sudo pip3 install keras_applications==1.0.8 --no-deps sudo pip3 install keras_preprocessing==1.1.2 --no-deps sudo pip3 install numpy==1.22.3 sudo pip3 install h5py==3.6.0 sudo pip3 install pybind11==2.9.2 pip3 install -U --user six wheel mock wget "https://raw.githubusercontent.com/PINTO0309/Tensorflow-bin/main/previous_versions/download_tensorflow-2.9.0-cp39-none-linux_aarch64.sh" chmod +x download_tensorflow-2.9.0-cp39-none-linux_aarch64.sh ./download_tensorflow-2.9.0-cp39-none-linux_aarch64.sh sudo -H pip3 install tensorflow-2.9.0-cp39-none-linux_aarch64.whl全てのコマンドが無事終了すれば インストールは終わりです。なお、TensorFlow 2.3 以降では keras は TensorFlow 専用となっていますので、.keras/keras.json による設定は必要ありません。
インストール終了後、カメラを用いない演習は、本書のサンプルファイルをそのまま利用できます。
カメラを用いた演習を行う場合、Bullseye 64-bit 版では、下記の2通りの選択肢があります。いずれの場合も、本書のサンプルプログラムがそのまま動作するわけではなく、対応済ファイルを別途ダウンロードして利用することになります。
- Legacy Cameraモードを有効にした上で、「本書の演習をウェブカメラで実行する方法」で配布しているサンプルファイルを利用する
- Legacy Cameraモードを無効の状態で、「本書の演習を picamera2 (libcamera) で実行する方法」で配布しているサンプルファイルを利用する。なお、2023年1月に発売された Camera Module v.3 はこの手法でしか使えません。
- Legacy Camera モード有効: 本書の演習をウェブカメラで実行する方法
- Legacy Camera モード無効: 本書の演習を picamera2 (libcamera) で実行する方法
TensorFlow 2 系のインストール方法 (Busterまで)
Raspberry Pi OS Bullseye よりも古い Buster までの OS で、Python3 用の TensorFlow 2 系のパッケージをインストールするには、以下の3つのコマンドを順に実行します。sudo pip3 install keras==2.4.3 wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v2.4.0/tensorflow-2.4.0-cp37-none-linux_armv7l.whl sudo pip3 install tensorflow-2.4.0-cp37-none-linux_armv7l.whl一つ目のコマンドは、kerasを最新の TensorFlow 用にアップグレードしています。この新しい keras は TensorFlow 専用となっており、本書で解説した Theano と合わせて使うことはできませんのでご注意下さい。そのため、Theano を用いるときは keras のバージョンを 2.3.1 に指定していたのでした。
二つ目のコマンドは、lhelontra 氏のサイトから、氏がビルドしたパッケージをダウンロードしています。三つ目のコマンドでそれをインストールしています。
なお、Raspberry Pi 1 や Raspberry Pi Zero を用いる場合、二つ目および三つ目のコマンドの「armv7l」の部分を「armv6l」に変更する必要がありますのでご注意ください。ただし、私は Raspberry Pi 1 や Raspberry Pi Zero での動作は確認していません。
以上でインストールは終わりです。なお、TensorFlow 2.3 以降では keras は TensorFlow 専用となっていますので、.keras/keras.json による設定は必要ありません。
上記のように TensorFlow2 をインストールした場合、学習済ファイルを TensorFlow2 用に更新しないと、認識率が悪くなることがあります。また、プログラムに手を加えなければならない場合もありました。
それらのファイルは下記のコマンドを実行することでダウンロードできます。プログラムをbluebacksディレクトリに展開した方は、下記のダウンロードコマンド実行前に「cd bluebacks」を実行してください。
なお、TensorFlow 2 系では、配布した学習済のファイル(拡張子 h5)も変更が必要な場合があるようでしたので、そちらもダウンロードしています。
wget https://raw.githubusercontent.com/neuralassembly/raspi/master/ml-10-09-janken-deep-tf2.py wget https://raw.githubusercontent.com/neuralassembly/raspi/master/ml-10-10-janken-deep-shorten-tf2.py wget https://raw.githubusercontent.com/neuralassembly/raspi/master/ml-digits-cnn-tf2.h5 wget https://raw.githubusercontent.com/neuralassembly/raspi/master/ml-hand-cnn-tf2.h5これらの利用方法は例えば以下となります。ml-digits-cnn-tf2.h5 や ml-hand-cnn-tf2.h5 のように、「-tf2」がついた学習済ファイルが存在する場合はそちらを優先しを用いるようにしてください。ml-iris-dnn.h5 は「-tf2」がついていないファイルを用いて構いません。
python3 ml-10-04-digits-cnn-load.py ml-digits-cnn-tf2.h5 python3 ml-10-05-digits-cnn-gui.py ml-digits-cnn-tf2.h5 python3 ml-10-06-digits-cnn-gui-mod.py ml-digits-cnn-tf2.h5 python3 ml-10-09-janken-deep-tf2.py ml-hand-cnn-tf2.h5 python3 ml-10-10-janken-deep-shorten-tf2.py ml-hand-cnn-tf2.h5
TensorFlow 1 系のインストール方法 (Busterまで)
Raspberry Pi OS Bullseye よりも古い Buster までの OS で、Python3 用の TensorFlow 1 系のパッケージをインストールするには、以下のコマンドを実行します。sudo pip3 install keras==2.3.1 tensorflow環境によってはpip3コマンドは下記のようにMemoryErrorで終了してしまうかもしれません。
(中略) File "/usr/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/filewrapper.py", line 50, in _close self.__callback(self.__buf.getvalue()) File "/usr/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/controller.py", line 275, in cache_response self.serializer.dumps(request, response, body=body), File "/usr/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/serialize.py", line 87, in dumps ).encode("utf8"), MemoryErrorその場合、下記のように「--no-cache-dir」オプションをつけてインストールコマンドを実行してください。
sudo pip3 --no-cache-dir install keras==2.3.1 tensorflowインストールは、途中でNumPyのアップグレードが実行されるため、数十分かかります。2018年8月時点で、NumPyのバージョンは1.12.1から1.15.0とアップグレードされました。
なお、下記のようなエラーが出てインストールに失敗することがあります。
Exception: Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 215, in main status = self.run(options, args) (中略) File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 315, in increment total -= 1 TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'これは、インストール時のネットワークに問題があるときに出るエラーです。 Raspberry Piがネットワークに接続していないとき、および、ファイルのダウンロード元であるサーバーに問題があるときの両方で上記エラーが出ます。
あるいは、同様のエラーで
THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.と出る場合もあります。
まず、Raspberry Piのネットワーク接続に問題がある場合はその改善を試みてください。
一方、先方のサーバーに問題がある場合、時間をあけてからコマンドを再実行すると問題が解消される場合があります。Raspberry Pi上でpipを用いてツールをインストールする場合、サーバー側の問題なのか、何度もインストールを試みて初めてインストールに成功する、ということが多い印象があります。
NumPyがアップグレードされたことは、本書で何度か行ったように、ml-03-01-version.pyを実行すると確認できます。試してみてください。 すると、見慣れない警告(FutureWarningなど)がたくさん現れると思います。
本ページの内容を実行すると、このような警告(Warning)がたくさん出るようになります。以下ではこれらの警告を「気にしない」という方針で記述していきます。これらの警告が気になるという方は、本ページの最後で紹介するツールのアンインストールを実行することで、この警告は出なくなります。
さて、TensorFlowのインストールが終わったら、それをkerasから利用する設定を行いましょう。 本書311ページで行った手順を逆にするだけです。
まず、ターミナルを新規に立ち上げ、下記のコマンドを実行しましょう。
leafpad .keras/keras.jsonなお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
mousepad .keras/keras.jsonすると、下記の内容がテキストエディタleafpadで開きます。本書の演習を実行した方は、backendが下記のようにtheanoに編集されているでしょう。なお、この4行の順番が変わっていることがありますが、それは気にしなくても構いません。
{ "epsilon": 1e-07, "floatx": "float32", "image_data_format": "channels_last", "backend": "theano" }バックエンドをTheanoからTensorFlowにするには、これを下記のように変更します。
{ "epsilon": 1e-07, "floatx": "float32", "image_data_format": "channels_last", "backend": "tensorflow" }編集が終わったら上書き保存し、テキストエディタleafpadを閉じます。以上でTensorFlow 1 系のインストールと設定は終了です。
上記の方法でインストールと設定が終わったら、本書に従いプログラムを実行してみましょう。例えば、手書き数字の認識を行うml-10-06-digits-cnn-gui-mod.pyを実行してみます。
python3 ml-10-06-digits-cnn-gui-mod.py ml-digits-cnn.h5警告(Warning)はいくつか出ますが、下図のように問題なくプログラムが実行されることがわかります。
おおむね、keras + Theano用のプログラムがそのまま動作しますが、「ml-10-09」および「ml-10-10」から始まるじゃんけんシステムのプログラムだけは、TensorFlow用の変更が必要です(スレッドと呼ばれるものを用いているためです)。
keras + TensorFlow 1 系用のじゃんけんシステムのプログラムは下記の2つのコマンドを実行することでダウンロードできます。プログラムをbluebacksディレクトリに展開した方は、下記のダウンロードコマンド実行前に「cd bluebacks」を実行してください。
wget https://raw.githubusercontent.com/neuralassembly/raspi/master/ml-10-09-janken-deep-tf.py wget https://raw.githubusercontent.com/neuralassembly/raspi/master/ml-10-10-janken-deep-shorten-tf.pyこれらのプログラムの実行方法は下記の通りとなります。
python3 ml-10-09-janken-deep-tf.py ml-hand-cnn.h5 python3 ml-10-10-janken-deep-shorten-tf.py ml-hand-cnn.h5
TensorFlowのアンインストール
以上、本書のディープラーニング用プログラムをkeras + TensorFlowの組合せで実行する方法を紹介しました。これを実行すると、主にNumPyがアップグレードされることにより、ディープラーニングの演習以外でも警告(Warning)が多く出るようになります。
これはインストールしたライブラリの内部記述に起因するものであり、多くはライブラリのアップグレードで解消されることが多いものです。本ページではそれらの警告を「気にしない」という方針で記述しました。
これらの警告が気になるという方は、本ページでインストールしたTensorFlowおよびアップグレードされたNumPyをアンインストールすることをお勧めします。下記のコマンドでアンインストールされます。
sudo pip3 uninstall tensorflow numpy途中で「Proceed ? (続行しますか?)」という質問が2回出ますので、キーボードの「y」をタイプしてEnterキーを押してください。
また、TensorFlow 2 系をインストールしていた方は、以下のように keras のバージョンを 2.3.1 に戻す必要もあります。
sudo pip3 install keras==2.3.1以上でNumPyは1.15.0から1.12.1に戻り、警告(Warning)は出なくなります。もちろん、TensorFlowもアンインストールされましたので使えなくなります。 ですから、.keras/keras.jsonのbackendの項目を下記のようにtheanoに変更して保存しましょう。
{ "epsilon": 1e-07, "floatx": "float32", "image_data_format": "channels_last", "backend": "theano" }
Python3で運用しようとしています。keras,theanoのインストールが完了しません。
返信削除また、tensorflowのインストールが失敗します。メモリ関連のオプションはつけました。
進捗バーは、81%で止まり、以下のようなエラーが出ます。THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.
ご所見をお願いします。
こちらでもPython2およびPython3でのインストールを確認しました。
削除結論としては、
『「THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.」
のエラーが出ることもありましたが、
何度かpipによるインストールコマンドを繰り返したらインストールに成功した』
となります。
「THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.」
のエラー自体は、インターネットのサーバー上にあるインストール用のファイルが
期待するファイルと違ったことが原因で出るエラーです。
以下、推測です。
pipのインストールの途中にファイルがダウンロードされるのですが、
接続先のサーバーが混んでいることなどが原因で、
このダウンロードが途中で止まることがあるのではないでしょうか。
途中で止まってしまった場合、ダウンロードされたファイルは
不完全なファイルとなっているので
「THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.」
というエラーが出るというわけです。
その場合、pipコマンドをリトライしてみてください。
ダウンロードが正常に完了すれば
エラーが出ずにインストールが完了します。
pipによるインストールは、接続先のサーバーの状態でエラーがでることが
時々あります。
その場合、上記のエラー以外にも、
「長いエラーが表示された後、最後に
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'」
と表示されてインストールに失敗する」
というケースもあります。
いずれの場合も、時間をおいて何度か試すことで成功するケースが多いと思います。
なお、インストール中のダウンロードのタイムアウト時間をデフォルトの15秒から
延ばすとエラーが出にくいかもしれません(気のせいかもしれませんが)。
タイムアウトを2分にするには下記のようにします。
sudo pip3 --no-cache-dir --default-timeout=120 install tensorflow
何度かトライし、ダウンロード終了までこぎつけたのですが、ディスクの空き容量がありませんと出まして、インストールには至りませんでした。もしご存知のところ有りましたら、コメントをお願いします。
削除ディスクの空き容量が足りない場合はより大きな容量のmicroSDカードにOSを入れ直してやり直すしかないように思います。
削除私の書籍の演習のみならば16GBのmicroSDカードで十分(8GBはギリギリかも)だと思いますが、
他の書籍やサイトを参考に何かされている場合、16GBでも足りないのかもしれません。
なお、64GB以上のmicroSDカードではフォーマットが必須でトラブルのもとなので
32GB以下のmicroSDカードをお勧めしておきます。
以下のようなエラーです。
削除ERROR: Could not install packages due to an EnvironmentError: [Errno 28] デバイスに空き領域がありません
調べてみると、容量は十分あるのです。tmpも256MB取っています。
手詰まりです。
「tmpも256MB取っています」という表現が気になりました。
削除Raspbianを通常通りインストールすると、「/tmp」は別パーティションとして分けられず
「/」内に作られるのではないでしょうか?
その場合、「/tmp」の容量制限は「/」の容量制限と同じとなります。
一時的に別ディレクトリを tmpとして用いるなら、
pip実行前に一度
export TMPDIR='/var/tmp'
を実行しておく、という方法などが検索すると出てきます。
(この場合も、/var/tmpが十分広い、という前提が必要です)
お手数かけます。
削除まもやたダウンロードがままならなくなっており、件のエラーメッセージにまでたどり着けません。
/var/tmpを256MBに設定してあります。
export TMPDIR='/var/tmp'を実行して、ダウンロード/インストールを試みることにします。
結果:この方法でも、同じエラー28が出てしまいました。
削除やはり「/var/tmpを256MBに設定」の意味がわかりません。
削除Raspbianを通常通りインストールすると、「/tmp」にも「/var/tmp」にも制限はかからないはずです。
本ページは「カラー図解 Raspberry Piではじめる機械学習」のサポートページであり、
本書の内容を外れた質問についてのサポートはできないことをご理解いただけますと幸いです。
なお、「tmpも256MB取っています」や「/var/tmpを256MBに設定」は、
ネット記事によくある「/tmpをSDカード上ではなくRAM上に配置」
という話と関連しているように思われます。
エラーメッセージを見る限り、その方法を用いているとTMPが足りなくなるため
tensorflowはインストールすることはできない、ということではないでしょうか。
話を少し戻しますと、kerasとtheanoもインストールできていないようです。
削除p309に記載のコマンドを実行すると以下のようです。
pi@raspberrypi:~/bluebacks $ sudo pip install keras theano
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: keras in /usr/local/lib/python3.5/dist-packages (2.2.4)
Requirement already satisfied: theano in /usr/local/lib/python3.5/dist-packages (1.0.4)
Requirement already satisfied: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.5/dist-packages (from keras) (1.1.0)
Requirement already satisfied: keras-applications>=1.0.6 in /usr/local/lib/python3.5/dist-packages (from keras) (1.0.8)
Requirement already satisfied: numpy>=1.9.1 in /usr/lib/python3/dist-packages (from keras) (1.12.1)
Requirement already satisfied: pyyaml in /usr/local/lib/python3.5/dist-packages (from keras) (5.1.1)
Requirement already satisfied: six>=1.9.0 in /usr/lib/python3/dist-packages (from keras) (1.12.0)
Requirement already satisfied: scipy>=0.14 in /usr/lib/python3/dist-packages (from keras) (0.18.1)
Requirement already satisfied: h5py in /usr/lib/python3/dist-packages (from keras) (2.7.0)
ここまでで、バージョンなどは出ていません。
その後、p310に記載の通りやってみると
pi@raspberrypi:~/bluebacks $ python2 ml-03-01-version.py
scikit-learnのバージョンは0.18です
numpyのバージョンは1.12.1です
scipyのバージョンは0.18.1です
matplotlibのバージョンは2.0.0です
PIL(Pillow)のバージョンは4.0.0です
kerasがインストールされていないか、まだ設定が済んでいません
theanoはインストールされていません
インストールされていません。
>「tmpも256MB取っています」や「/var/tmpを256MBに設定」は、
削除ネット記事によくある「/tmpをSDカード上ではなくRAM上に配置」
という話と関連しているように思われます。
インストールの問題で煩わせてすみません。
実は同様の件で、あるサイトに、/temp 及び /var/temp を拡張したところ、無事にインストールできました。という報告がありましたので、それをやってみた次第なのです(駄目でしたが…)。
コピーされたメッセージについて言いますと、
削除sudo pip install keras theano
のコマンドで
「Requirement already satisfied: keras in /usr/local/lib/python3.5/dist-packages」
と出る点はおかしいです。
なぜなら、インストール直後の状態のRaspbianでは
「pipコマンドはpython2用のライブラリをインストールする」
よう設定されているからです。
上のメッセージは、pipコマンドで
python3用のライブラリのインストールとなっていることが問題です。
通常、python3用のライブラリのインストールはpip3コマンドで行うからです。
恐らく、これも何かのサイトを参考にpipの設定を変更されたのでしょう。
ちなみに、python3用のkerasとtheanoはインストールされているように見えます。
整理すると、通常Raspbianでは
「pipおよびpip2コマンドでpython2用のライブラリがインストールされ、
pip3コマンドでpython3用のライブラリがインストールされる」
状態になっています。
実行コマンドについても同様で、通常では
「pytonコマンドおよびpython2コマンドで、python2系が実行され、
python3コマンドでpython3系が実行」
されます。
言い換えれば「pipまたはpip2でインストールしたらpythonまたはpython2で実行、
pip3でインストールしたらpython3で実行」です。
上で問題となった/tmpディレクトリの件も含めまして、
本書とこの補足ページ以外の解説を参考に変更が加えられたRaspbianでの動作について
サポートすることはできません。
また、無理にpython3やtensorflowなどを用いようとするより、
本書の通りの記述を確実に身に着けてから
python3やtensorflowに挑戦する方がよいのではないでしょうか。
本書ではpython3およびtensorflowは「上級者向けのサービス」という位置づけです。
以後、OSを再インストールするなどして、
インストール直後の状態のRapsbianで試されたのでない限り、
ご質問に回答することはできません。
ご了承ください。
sudo pip2 install keras theano
削除でインストールし、python2にて、手書き認識のデモを行いました。書籍の通りに上手くいったと思います。
ご指導に感謝いたします。
なお、python3でのtensorflow運用については、自分の今後の課題といたします。(tensorflowのインストールが相変わらず上手くいっておらず、python3におけるkerasについても、どうもインストールが出来ておらないようなのです)
ご所見、ありがとうございました。
貴著のアイリスデータに関し、anaconda (python3)のspyder3で実習してきました。第10章の前まではすべて実行可能でした。第10章のdeep learningでつまずいています。kerasとtheanoをインストール後 .keras/keras.jsonを編集し、Theanoをバックエンドで ml-10-01-iris-deep-learn.py を実行しましたところ、下記のエラーが出てしまいます。
返信削除Using Theano backend.
WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLAS functions.
使用法: python ml-10-01-iris-deep-learn.py 保存ファイル名.h5
An exception has occurred, use %tb to see the full traceback.
SystemExit
C:\Users\M. Ishido\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py:3304: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
%tb
Traceback (most recent call last):
File "", line 1, in
runfile('C:/Users/M. Ishido/bbpy/ml-10-01-iris-deep-learn.py', wdir='C:/Users/M. Ishido/bbpy')
File "C:\Users\M. Ishido\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
execfile(filename, namespace)
File "C:\Users\M. Ishido\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/M. Ishido/bbpy/ml-10-01-iris-deep-learn.py", line 13, in
sys.exit()
SystemExit
もう一点理解できていないのが学習済みファイルについてです。これはプログラムにより自動的にできるファイルなのでしょうか。対処方法を教えていただければ、幸いです。
本書はRaspberry Pi上で機械学習を学ぶ書籍ですので、
削除Windows上でのanacondaでの動作をサポートしていません。
以下に簡単なコメントを記しますが、
これはサポートではなく、あくまでコメントに過ぎないことにご留意ください。
書籍p.321にありますように、 ml-10-01-iris-deep-learn.py を実行して
irisのデータを学習させるには、
python ml-10-01-iris-deep-learn.py result-iris.h5
というコマンドで実行する必要があります。
ここで、ファイル名の後ろにつけている「result-iris.h5」は
コマンドライン引数といいます。
コマンドライン引数とは本書p.276で解説されており、
「プログラム(ここではml-10-01-iris-deep-learn.py)に
補助的な情報を追加する」という役割があります。
今回の場合は、
「学習結果を保存するファイル名をresult-iris.h5とする」
という意味になります。
コピーされたメッセージに
「使用法: python ml-10-01-iris-deep-learn.py 保存ファイル名.h5」
という部分がありますが、これは
「コマンドライン引数に保存したいファイルの名前を指定してください」
という意味のエラーメッセージで、
ml-10-01-iris-deep-learn.pyの12行目に書かれている内容です。
ここまで解説すると、必要なのは
「anacondaでPythonプログラムを実行するとき、
どのようにコマンドライン引数を与えるか」
という知識であることがわかると思います。
冒頭で述べたようにこれはサポートではなくコメントですが、
恐らく下記のページが参考になるでしょう。
http://fanblogs.jp/papas56/archive/52/0
上記ページの「コマンドラインオプション(コマンドライン引数と同じ)」の
部分にresult-iris.h5と書いて実行すれば良いのではないでしょうか。
なお、「もう一点理解できていないのが学習済みファイルについてです。
これはプログラムにより自動的にできるファイルなのでしょうか」
については恐らくml-10-01-iris-deep-learn.pyを実行すればわかると思います。
ml-10-01-iris-deep-learn.pyの実行には時間がかかるので、
それが面倒だという方のために、私があらかじめ作成したファイルをサンプルに含めているのです。
なお、本書では学習済ファイルの作成は8章で初めて体験することになっています。
具体的にはp.271です。
そこを経ずにいきなり10章から学んでいるのだとすれば、
つまづくポイントが多いだろうということもコメントしておきます。
サポート範囲を超える本質的なご回答をありがとうございます。Spyder3にはデバッグ機能があり第7、8章も実施してみました。
返信削除debugfile('C:/Users/M. Ishido/bbpy/ml-08-03-learn.py', wdir='C:/Users/M. Ishido/bbpy')
> c:\users\m. ishido\bbpy\ml-08-03-learn.py(2)()
1 # -*- coding: utf-8 -*-
----> 2 import cv2
3 import sys
4 import numpy as np
5 from sklearn.neural_network import MLPClassifier
ipdb> > c:\users\m. ishido\bbpy\ml-08-03-learn.py(15)()
13 # 学習結果を保存するファイルの決定
14 if len(sys.argv)!=2:
2--> 15 print('使用法: python ml-08-03-learn.py result.pkl')
16 sys.exit()
17 savefile = sys.argv[1]
ipdb>
ipdb>
デバッグ後のml-08-03-learn.py が展開せず、再度検討しております。
デバッグメッセージの読み方が良く分からないのですが、
削除これは2行目「import cv2」と15行目「print('使用法: python ml-08-03-learn.py result.pkl')」
に問題があるということでしょうか?
そうだとして、
15行目の方は前回と同じく「result.pklというコマンドライン引数をつけなければならない」
という意味を表しています。学習結果を保存するファイル名です。
2行目に問題があるとすれば、
anaconda用のOpenCVがインストールされていないということではないでしょうか。
Python 3用のAnacondaをお使いだと仮定すると、下記操作が必要になります。
・Anaconda Navigatorを起動し、Environmentsを選択する
・右の領域でInstalledをNot Installedに変更
・右の領域での右端の入力領域でopencvで検索
・出てくる選択肢のうちpy-opencvにチェックを入れてApplyボタンを押す
・確認ウインドウでOKする
以上で、anaconda用にPython用のOpenCVがインストールされます。
以上のもと、result.pklという保存用ファイル名をコマンドライン引数として
指定した上でml-08-03-learn.py実行すれば良いのではないでしょうか。
なお、本書のサンプルファイルmlbb-sample.zipは
6/25に最新のPython環境に対応するために更新されています。
最新のmlbb-sample.zipをダウンロードして展開して得たファイルでないと
エラーが出る可能性がありますのでご注意下さい。
さて、ここまでが出来たとしても、カメラを用いたプログラムについては
Raspberry Pi専用カメラを前提とした記述となっています。
このあたりでWindows用anacondaに関するご質問はお控え頂けると幸いです。
よろしくお願いします。
サポートベクターマシンや多層ニューラルネットワークで紹介があった分類結果をグラフの背景の色分けによる可視化を、deep learningの分類結果にも応用可能でしょうか。可能な場合プログラムはどのようになるのでしょうか。2特徴量、2クラスでの分類を試みているのですが、reshapeのところで数値エラーが出てしまいます。ValueError: cannot reshape array of size 320000 into shape (600,600)よろしくお願いいたします。
返信削除独自データの解析に関する質問はサポート対象外ですので、
削除本書プログラムml-10-01-iris-deep-learn.pyをベースに解説します。
さらに、2特徴量2クラスのプログラムのグラフ化に関しても
サポート外の内容ですので手短に解説します。
ここで解説するのは、
4特徴量3クラスのプログラムml-10-01-iris-deep-learn.py
を2特徴量2クラスのプログラムに改造し、
それをml-04-02-2feat2class01.pyを参考にグラフ表示する、という内容です。
まず、ml-10-01-iris-deep-learn.pyにおいてml-04-02-2feat2class01.pyを参考に
X = iris.data
y = iris.target
の後に、下記の3行を追加します。それにより、2特徴量2クラスのプログラムになります。
X = X[:,:2]
X = X[y!=2]
y = y[y!=2]
この時点でml-10-01-iris-deep-learn.pyを実行してエラーが出ないことを確認してください。
次に、グラフ描画部分をml-04-02-2feat2class01.pyからml-10-01-iris-deep-learn.pyに移植します。
history = model.fit(X, y_keras, epochs=4000, validation_split=0.1, batch_size=n_samples, verbose=2)
の次の行にまず以下の6行を追加します(コメントは全て省略しています)
x_min = min(X[:,0]) - 1
x_max = max(X[:,0]) + 1
y_min = min(X[:,1]) - 1
y_max = max(X[:,1]) + 1
XX, YY = np.mgrid[x_min:x_max:500j, y_min:y_max:500j]
Xg = np.c_[XX.ravel(), YY.ravel()]
さらにそのまま続けて、モデルの予測に関する以下の2行を追加します。
Z = model.predict_classes(Xg, verbose=0)
Z = Z.reshape(XX.shape)
最後に、そのまま続けてグラフ描画部を追加します。
cmap01 = ListedColormap([(0.5, 1, 1, 1), (1, 0.93, 0.5, 1)])
plt.pcolormesh(XX, YY, Z==0, cmap=cmap01)
plt.xlabel('sepal length')
plt.ylabel('sepal width')
Xc0 = X[y==0]
Xc1 = X[y==1]
plt.scatter(Xc0[:,0], Xc0[:,1], c='#E69F00', linewidths=0.5, edgecolors='black')
plt.scatter(Xc1[:,0], Xc1[:,1], c='#56B4E9', linewidths=0.5, edgecolors='black')
plt.show()
なお、ml-10-01-iris-deep-learn.pyの冒頭に
from matplotlib.colors import ListedColormap
を追加する必要があります。
以上です。
なお、追加した内容はほぼml-04-02-2feat2class01.pyの内容からコピーしてきたものです。
早々にありがとうございます。うまくいきました。貴著携えヘルシンキに来ております。
削除104ページですが「「ml-04-02-2feat2class01.py」を実行すれば図4-7のようなグラフが現れます。」とありますが、現れません。現在トラブルシューティング中です。なにか有力な情報があればご教示いただきたくお願いいたします。
返信削除もう少し実行環境やエラーメッセージなどについて説明があれば
削除解決の糸口がつかめるかもしれません。
基本的にml-04-02-2feat2class01.pyでしたら、
scikit-learnがインストールされていれば実行可能です。
ケース(1)
sudo apt install python-sklearn
でscikit-learnをインストールしたのなら、Python2で利用可能になります。
コマンド
python ml-04-02-2feat2class01.py
で実行します。
ケース(2)
sudo apt install python3-sklearn
でscikit-learnをインストールしたのなら、Python3で利用可能になります。
コマンド
python3 ml-04-02-2feat2class01.py
で実行します。
なお、ケース(2)でインストールした場合ならば
GUIをもつ開発環境である Thonny Python IDE でも実行可能です。
なお、上で記した内容は、全てラズベリーパイのデスクトップ上で
実行する方法です。上級者が行うように
「WindowsやmacOSなどからターミナルでログインしている」
場合はグラフの表示に失敗しますのでご注意ください。
金丸様の書かれた当該参考図書で機械学習のイメージがかなりわかりました。実際にじゃんけんゲームもカメラモジュールを接続して作成して完成できました。ありがとうございます。
返信削除本日は質問があり、コメントを書かせていただきました。お時間のある時にお教え頂ければ幸いでございます。
(質問)
/bluebacks $ python ml-10-04-digits-cnn-load.py ml-digits-cnn.h5
を実行すると下記の様なエラーになります。
pi@raspberrypi:~/bluebacks $ python ml-10-04-digits-cnn-load.py ml-digits-cnn.h5
Using Theano backend.
Traceback (most recent call last):
File "ml-10-04-digits-cnn-load.py", line 18, in
model = keras.models.load_model(savefile)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/saving.py", line 458, in load_wrapper
return load_function(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/saving.py", line 550, in load_model
model = _deserialize_model(h5dict, custom_objects, compile)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/saving.py", line 243, in _deserialize_model
model = model_from_config(model_config, custom_objects=custom_objects)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/saving.py", line 593, in model_from_config
return deserialize(config, custom_objects=custom_objects)
File "/usr/local/lib/python2.7/dist-packages/keras/layers/__init__.py", line 168, in deserialize
printable_module_name='layer')
File "/usr/local/lib/python2.7/dist-packages/keras/utils/generic_utils.py", line 147, in deserialize_keras_object
list(custom_objects.items())))
File "/usr/local/lib/python2.7/dist-packages/keras/engine/sequential.py", line 302, in from_config
model.add(layer)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/sequential.py", line 166, in add
layer(x)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/base_layer.py", line 425, in __call__
self.build(unpack_singleton(input_shapes))
File "/usr/local/lib/python2.7/dist-packages/keras/layers/convolutional.py", line 141, in build
constraint=self.kernel_constraint)
File "/usr/local/lib/python2.7/dist-packages/keras/legacy/interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/base_layer.py", line 243, in add_weight
weight = K.variable(initializer(shape, dtype=dtype),
File "/usr/local/lib/python2.7/dist-packages/keras/initializers.py", line 218, in __call__
dtype=dtype, seed=self.seed)
File "/usr/local/lib/python2.7/dist-packages/keras/backend/theano_backend.py", line 2668, in random_uniform
return rng.uniform(shape, low=minval, high=maxval, dtype=dtype)
File "/usr/local/lib/python2.7/dist-packages/theano/sandbox/rng_mrg.py", line 872, in uniform
rstates = self.get_substream_rstates(nstreams, dtype)
File "/usr/local/lib/python2.7/dist-packages/theano/configparser.py", line 117, in res
return f(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/theano/sandbox/rng_mrg.py", line 771, in get_substream_rstates
assert isinstance(dtype, str)
AssertionError
下記ページに記しましたとおり、2019年8月頃より、kerasとtheanoをpython2で用いることができなくなっているようです。
削除https://mlbb1.blogspot.com/2018/03/blog-post.html
「p.327 ml-10-02-iris-deep-load.pyの実行コマンド(配布された学習済ファイルを用いる場合」
そこで、上記ページの内容を下記の順でたどり、
python2ではなくpython3で実行してみて頂けないでしょうか?
(その方法は上記ページの下記項目に書いてあります)
「p.308 kerasとtheanoの利用の前に」
「p.308 kerasとtheanoの利用に必要なツールをインストールするためのコマンド」
「p.309 kerasとtheanoをインストールするためのコマンド」
お手数ですがよろしくお願いします。
手順に沿って、tensorflowを用いた手書き認識をやってみました。
返信削除ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
手書き数字の認識を行うml-10-06-digits-cnn-gui-mod.pyを実行してみます。
python3 ml-10-06-digits-cnn-gui-mod.py ml-digits-cnn.h5
pi@raspberrypi3B:~/bluebacks $ python3 ml-10-06-digits-cnn-gui-mod.py ml-digits-cnn.h5
結果は、以下の通りでした。うまく行っていないようですが、どこが行けないのか分かりません。
コメントをお願いします。
2021-01-15 13:50:24.551226: E tensorflow/core/platform/hadoop/hadoop_file_system.cc:132] HadoopFileSystem load error: libhdfs.so: cannot open shared object file: No such file or directory
Traceback (most recent call last):
File "/home/pi/.local/lib/python3.7/site-packages/keras/__init__.py", line 3, in
from tensorflow.keras.layers.experimental.preprocessing import RandomRotation
ModuleNotFoundError: No module named 'tensorflow.keras.layers.experimental.preprocessing'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "ml-10-06-digits-cnn-gui-mod.py", line 2, in
import keras
File "/home/pi/.local/lib/python3.7/site-packages/keras/__init__.py", line 6, in
'Keras requires TensorFlow 2.2 or higher. '
ImportError: Keras requires TensorFlow 2.2 or higher. Install TensorFlow via `pip install tensorflow`
お手数をかけますが、よろしくお願いいたします。
恐らくtensorflow 1.14 と kerasの組み合わせで実行しようとしているのだと思われますが、
削除keras をそのままインストールすると、tensorflow 2.2 以上が求められるバージョンがインストールされ、実行時にエラーが出ます。
そのため、ページの指示の通り、
sudo pip3 install keras==2.3.1
のようにバージョンを指定してkeras をインストールする必要があります。
上記インストールコマンドを実行すればkerasがダウングレードされ、
プログラムを実行できるようになります。
sudo pip3 install keras==2.3.1 としてインストールしてありますが、再インストールしておきました。
削除やはり結果は、
'Keras requires TensorFlow 2.2 or higher. '
ImportError: Keras requires TensorFlow 2.2 or higher. Install TensorFlow via `pip install tensorflow`
と出てしまいます。
エラーメッセージを見ることで、状況がわかりました。
削除まず、jazzwalkerさんの Raspberry Piには以下の二つのバージョンの
keras がインストールされています。
keras 2.3.1: 正常動作するkeras
keras 2.4.3: エラーが出るkeras
そして、プログラム実行時にはエラーの出る keras 2.4.3 が
優先して使われている、というわけです。
なぜこうなっているのか、以下で整理して解説します。
1. keras 2.3.1
システム領域 /usr/local/lib/python3.7/dist-packages に存在
管理者権限のコマンド sudo pip3 install keras==2.3.1 でインストールされた
2. keras 2.4.3
ユーザーpiの領域 /home/pi/.local/lib/python3.7/site-packages に存在
ユーザー権限のコマンド pip3 install keras でインストールされた
すなわち、正しい管理者権限のコマンド
sudo pip3 install keras==2.3.1
を実行する前に、どこかのタイミングでユーザー権限のコマンド
pip3 install keras
を実行したことで2つのバージョンのkerasが共存したと思われます。
なお、私の書籍およびホームページでは pip3 コマンドは
全て管理者権限(sudo つき)で実行する方針で記しております。
さて、ユーザーpiの領域にある keras 2.4.3 を削除するには、
ユーザー権限で(sudo なしで)下記のコマンドを実行してください。
pip3 uninstall keras
途中で
Proceed (y/n)?
と聞かれたら、キーボードで y をタイプして Enter です。
以上で、keras 2.3.1 が使われるようになり、プログラムが実行できるはずです。
なお、jazzwalkerさんのこれまでの Raspberruy Pi の利用状況はわかりませんが、
このようにシステム領域のツールとユーザーpiの領域のツールが混在している可能性があります。
今後のこのようなトラブルが続く場合、一度OSを再インストールしてツールを整理した方が
良いかもしれません。
以上です。
お手数をおかけしております。
削除ご指導のように、pip3 uninstall keras を実行し、該当のバージョンをアンインストールしました。
その上で、
python3 ml-10-06-digits-cnn-gui-mod.py ml-digits-cnn.h5 を実行したところ、エラーが残りました。
pi@raspberrypi3B:~/bluebacks $ python3 ml-10-06-digits-cnn-gui-mod.py ml-digits-cnn.h5
Using TensorFlow backend.
2021-01-16 12:14:15.084348: E tensorflow/core/platform/hadoop/hadoop_file_system.cc:132] HadoopFileSystem load error: libhdfs.so: cannot open shared object file: No such file or directory
Traceback (most recent call last):
File "ml-10-06-digits-cnn-gui-mod.py", line 22, in
model = keras.models.load_model(savefile)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/saving.py", line 492, in load_wrapper
return load_function(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/saving.py", line 584, in load_model
model = _deserialize_model(h5dict, custom_objects, compile)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/saving.py", line 273, in _deserialize_model
model_config = json.loads(model_config.decode('utf-8'))
AttributeError: 'str' object has no attribute 'decode'
コメントを頂ければありがたいです。
エラー内容で検索すると下記のページが引っ掛かります。
削除【Keras】エラー 'str' object has no attribute 'decode'について
https://qiita.com/Hiroki-Fujimoto/items/b078bfb680fb710c38c1
上記ページが当てはまるとするならば、
sudo pip3 uninstall h5py
および
pip3 uninstall h5py
にて、pip3 でインストールされた h5py をアンインストールする必要があるででしょう。
なお、私の書籍およびホームページでは h5py は
apt コマンドで python3-h5p パッケージをインストールしていますので、
pip3 によるインストールの必要はありません。
さて、原則的に私の書籍およびホームページでは、
インストール直後の Rasberry Pi OS で動作検証しております。
他の書籍やサイトで作業をした後のRaspberry Pi OSでは、
ツールの不整合などの理由で動作しないことがありますので、
サポートができない場合がありますのでご了承下さい。
そのため、先ほどのコメントにも記しましたように、
トラブルが続くようでしたら OS の再インストールをお勧めします。
コメントありがとうございました。
削除sudo pip3 uninstall h5py の後、
sudo pip3 install h5py==2.10.0
これで
python3 ml-10-06-digits-cnn-gui-mod.py ml-digits-cnn.h5
が実行されました。
ご指導ありがとうございました。