はじめに
本書では、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 限定の方法であることはご了承ください。
状況を整理すると下記の通りです。2025年10月時点での最新 OS Trixie を用いた場合、デフォルトの Python 3.13 とは別に Python 3.11 をインストールして用いることになり、かなり特殊な方法ですので、個人的には Bookworm をお勧めします。
| OS | TensorFlow | keras + Theano |
| Raspberry Pi OS Trixie 64-bit | △ (ver2) | × |
| Raspberry Pi OS Trixie 32-bit | × | × |
| Raspberry Pi OS Bookworm 64-bit | 〇 (ver2) | × |
| Raspberry Pi OS Bookworm 32-bit | × | × |
| Raspberry Pi OS Bullseye 64-bit | 〇 (ver2) | 〇 |
| Raspberry Pi OS Bullseye 32-bit | × | 〇 |
| 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はエラーではありませんから、当面は気にしなくても良いのですが、気になる方は気になるでしょう。
以下の流れ
さて、本ページでは以下の流れにそって解説していきます。自分の該当する部分をご覧ください。
Trixie にインストールされているのは Python 3.13 という TensorFlow がサポートしていないバージョンなので、仮想環境に Python 3.11 をインストールして TensorFlow をセットアップするという方針です。2025年10月時点で、Raspberry Pi のカメラモジュールの利用はできず、ウェブカメラを用いることになります。
以下のコマンドを一つずつ順に実行してください。
# まず、必要なライブラリをインストール
sudo apt -y install libhdf5-dev libc-ares-dev libeigen3-dev gcc gfortran libgfortran5 libatlas3-base libopenblas-dev libblas-dev liblapack-dev cython3 openmpi-bin libopenmpi-dev
# Python 3.11 の仮想環境を作るために pyenv と pipenv のインストールと設定
sudo apt -y install pyenv pipenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
source ~/.bashrc
pyenv install 3.11.11
pipenv --python 3.11.11
# 以上で、Python 3.11.11 が $HOME/.pyenv/versions/3.11.11 にインストールされた
# 仮想環境は $HOME/.local/share/virtualenvs 以下に構築されている
# ここからが TensorFlow のインストール
pipenv install keras_applications==1.0.8
pipenv install keras_preprocessing==1.1.2
pipenv install numpy==1.26.2
pipenv install h5py==3.14.0
pipenv install pybind11==2.9.2
pipenv install protobuf==3.20.3
pipenv install ml_dtypes==0.2.0
pipenv install six wheel mock gdown
wget https://github.com/PINTO0309/Tensorflow-bin/releases/download/v2.15.0.post1/tensorflow-2.15.0.post1-cp311-none-linux_aarch64.whl
pipenv install tensorflow-2.15.0.post1-cp311-none-linux_aarch64.whl
# 最後に、本書10章のプログラムを実行するために必要なライブラリも仮想環境にインストール
pipenv install scikit-learn matplotlib opencv-python
以上で、Python 3.11.11 の仮想環境で本書10章のプログラムを実行する準備が整いました。なお、この時点でホームディレクトリにある設定ファイル .bashrc の末尾をコマンド「 mousepad ~/.bashrc 」により見たとき、下記のようになっているのが正しいです。こうなっていない場合、修正するか、末尾に手動で追記して保存してください。
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
さて、10章のプログラムを実行する前に、
pipenv shell
を実行してください。すると、プロンプトが
(kanamaru) kanamaru@raspberrypi:~ $
のように変化します。2か所ある「kanamaru」の部分は皆さんのユーザー名で置き換えられているはずです。先頭の「(kanamaru)」が、仮想環境で作業していることを示します。
10章のプログラム(ml-10で始まるもの)はこの仮想環境で、「python3 ファイル名」などのコマンドで実行できます。コピーできる形式のコマンドは全て以下に記されています。
なお、2025年10月時点で、Raspberry Pi のカメラモジュールを用いるプログラム(ml-10-08-hand-cnn-load.py、ml-10-09-janken-deep.py、ml-10-10-janken-deep-shorten.py)は動作しません。
「
本書の演習をウェブカメラで実行する方法」で配布している
ml-10-08-hand-cnn-load-webcam.py、ml-10-09-janken-deep-webcam.py、ml-10-10-janken-deep-shorten-webcam.py をウェブカメラとともに用いるのが良いでしょう。
なお、仮想環境を抜けるには
(kanamaru) kanamaru@raspberrypi:~ $ exit
を実行してください。なお、仮想環境に入らずに「pipenv run python3 ファイル名」でプログラムを実行することもできますのでお好みでどうぞ。
Raspberry Pi OS Bullseye 64-bit 版で、TensorFlow 2 系のパッケージをインストールするには、以下のコマンドを1行ずつ順に実行します。
PINTO0309 (Katsuya Hyodo) さんのビルドした TensorFlow 2.15 の 64-bit 版がインストールされます。
sudo apt -y install libhdf5-dev libc-ares-dev libeigen3-dev gcc gfortran libgfortran5 libatlas3-base libatlas-base-dev libopenblas-dev libblas-dev liblapack-dev cython3 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.26.2 --break-system-packages
sudo pip3 install h5py==3.14.0 --break-system-packages
sudo pip3 install pybind11==2.9.2 --break-system-packages
sudo pip3 install protobuf==3.20.3 --break-system-packages
sudo pip3 install ml_dtypes==0.2.0 --break-system-packages
pip3 install -U --user six wheel mock gdown --break-system-packages
wget https://github.com/PINTO0309/Tensorflow-bin/releases/download/v2.15.0.post1/tensorflow-2.15.0.post1-cp311-none-linux_aarch64.whl
sudo -H pip3 install tensorflow-2.15.0.post1-cp311-none-linux_aarch64.whl --break-system-packages
全てのコマンドが無事終了すれば インストールは終わりです。なお、TensorFlow 2.3 以降では keras は TensorFlow 専用となっていますので、.keras/keras.json による設定は必要ありません。
Raspberry Pi OS Bullseye 64-bit 版で、TensorFlow 2 系のパッケージをインストールするには、以下のコマンドを1行ずつ順に実行します。
PINTO0309 (Katsuya Hyodo) さんのビルドした TensorFlow 2.15 の 64-bit 版がインストールされます。
なお、下記のコマンドを実行すると、numpy のバージョンが新しくなる関係で theano が動作しなくなりますのでご了承ください。さらに、numpy が新しくなる影響で apt でインストールした scikit-learn 0.23.2 が動作しなくなりますので、pip3 で最新版をインストールし直す必要もあります。
sudo apt -y install libhdf5-dev libc-ares-dev libeigen3-dev gcc gfortran libgfortran5 libatlas3-base libatlas-base-dev libopenblas-dev libblas-dev liblapack-dev cython3 openmpi-bin libopenmpi-dev python3-dev python3-h5py
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.26.2
sudo pip3 install h5py==3.14.0
sudo pip3 install pybind11==2.9.2
sudo pip3 install protobuf==3.20.3
sudo pip3 install ml_dtypes==0.2.0
pip3 install -U --user six wheel mock gdown
wget https://github.com/PINTO0309/Tensorflow-bin/releases/download/v2.15.0.post1/tensorflow-2.15.0.post1-cp39-none-linux_aarch64.whl
sudo -H pip3 install tensorflow-2.15.0.post1-cp39-none-linux_aarch64.whl
Bullseye のみで必要になる、scikit-learn のインストールコマンドは下記です。2025年6月の時点では、scikit-learn は 0.23.2 から 1.6.1 へアップグレードされました。
sudo pip3 install -U scikit-learn
さて、全てのコマンドが無事終了すれば インストールは終わりです。なお、TensorFlow 2.3 以降では keras は TensorFlow 専用となっていますので、.keras/keras.json による設定は必要ありません。
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
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"
}