Back to tech

RaspberrypiでもKerasで深層学習したい!

2 min read
Table of Contents

研究でRaspberryPi内に深層学習を簡単に行えるKerasをインストールすることになりました

KerasはバックグラウンドにTensorFlowを入れる必要がありますが以前にpipで簡単に入ることを聞いていたので余裕だと思っていましたがいろいろと罠がありました

なんとか入れることができたので導入の仕方と躓いたところを書いておきます

はじめに

導入の基本的な仕方はTensorFlowの公式に沿って行います

github.com
github.com

公式の導入方法

Install TensorFlow with pip
www.tensorflow.org
image

導入環境

  • Raspberrypi 3
  • Python 3.5.3

アップデートと仮想環境の構築

rasbianをインストールしてからはじめにやる儀式と仮想環境を作っていきます

まずはupdate等をしてパッケージを最新にします

アップデートしたら再起動をかけて落ち着きます

sudo apt update
sudo apt -y upgrade
sudo reboot

つぎにpythonなどをインストールします

sudo apt install python3-dev python3-pip
sudo pip3 install -U virtualenv
sudo apt install libatlas-base-dev #numpyエラーの回避

libatlas-base-devをインストールしないとnumpyを使うときにエラーがでるので導入しておきます

仮想環境の作成

TensorFlow・Kerasを動かすための仮想環境(virtualenv)を作っていきます

#作成
virtualenv --system-site-packages -p python3 ./venv

#起動
#"(venv) pi@raspberrypi:~ $ "となる
source ./venv/bin/activate

virtualenvの使い方は以下のサイトが良いと思います

Pythonの仮想環境を構築できるvirtualenvを使ってみる - Qiita
qiita.com
image

TensorFlow・Kerasの導入

ついにTensorFlowとKerasを入れていきます

TensorFlowの導入については公式とは異なる入れ方をします(理由は後述の躓いた点にて)

#TensorFlowのインストール
wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.11.0/tensorflow-1.11.0-cp35-none-linux_armv7l.whl
pip install tensorflow-1.11.0-cp35-none-linux_armv7l.whl
rm tensorflow-1.11.0-cp35-none-linux_armv7l.whl

#Kerasのインストール
pip install keras

あとはPythonを起動してkerasをインポートしてあげてエラーがでなければおkです

躓いた点

  1. TensorFlowの導入 公式の方法だと以下のように入れています

    pip install --upgrade tensorflow

    しかしこれを導入後、Kerasをインストールしインポートすると以下のエラーがでます

    Using TensorFlow backend.
    /home/pi/venv/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: compiletime version 3.4 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.5
      return f(*args, **kwds)
    /home/pi/venv/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: builtins.type size changed, may indicate binary incompatibility. Expected 432, got 412
      return f(*args, **kwds)

    ネットで検索すると結構問題になっているようです どうやらtensorflowのプログラムの一部がpython3.4用でpython3.5では動かないかもというエラーのようです

    そのため、TensorFlowのバージョンは最新ではありませんが、arm版でビルドしているものをインストールしました

    https://github.com/lhelontra/tensorflow-on-arm/releases/

    ※現時点(2018/11/27)では、1.11.0が最新でした

  2. python3.6にしてからTensorFlowの導入 RaspberryPiは2.7と3.5がデフォルトではいっています 個人的には3.5は古い印象があったのでpython3.6でインストールしようとやっていましたが罠がありました罠というのはKerasを動かすのに必要なScipyとh5pyのインストールです めっちゃくちゃ時間かかります 回避方法として”apt-get”で入れる方法もありましたが、仮想環境では認識してくれず、結局scipyとh5pyのインストールをしてしまいます 時間をかければ3.6でもTensorFlow・Kerasの環境構築ができますが、今回は見送りました

  3. module compiled against API version 0xc but this version of numpy is 0xa の回避

    pip install numpy --upgrade
  4. pipがサポートしている.whlを調べる方法 TensorFlowを入れるために.whlにて導入しています これはどれでもいいわけではなく、pipがサポートしているものにものをインストールしなければなりません pythonを起動し以下のコマンドを打つと対応しているwhlを確認することができます

    pi@raspberrypi:~ $ python
    >>> from pip._internal.pep425tags import get_supported
    >>> get_supported()
    [('cp35', 'cp35m', 'linux_armv7l'), ('cp35', 'abi3', 'linux_armv7l'), ('cp35', 'none', 'linux_armv7l'), ('cp34', 'abi3', 'linux_armv7l'), ('cp33', 'abi3', 'linux_armv7l'), ('cp32', 'abi3', 'linux_armv7l'), ('py3', 'none', 'linux_armv7l'), ('cp35', 'none', 'any'), ('cp3', 'none', 'any'), ('py35', 'none', 'any'), ('py3', 'none', 'any'), ('py34', 'none', 'any'), ('py33', 'none', 'any'), ('py32', 'none', 'any'), ('py31', 'none', 'any'), ('py30', 'none', 'any')]

参考文献