はじめに
こんにちは。前回の記事でAndroid MLKitを通じて初めて機械学習に接し、以降も少しずつ学習を続けています。
その記事の最後のあたりで、Tensorflow Liteの独自モデルによる解析についてほんの少しだけ触れました。
「on-device解析は出来ることや精度に限界がある、じゃあ自分でモデルを作ってみたい」
「でもTensorflow Liteのモデルってどう作るんだろう」
となり調べてみたところ、Tensorflowそのものについて理解する必要があるとわかりました。
以下は知識整理のためのまとめと、実際にTensorflow環境を作って、触ってみるところまでの記事となります。
そもそもTensorflowとは
「機械学習といえばTensorflow」という感じで名前だけはよく見聞きするTensorflowですが、実際にどういうものなのかをざっくり表現すると機械学習で推測を行う際に使用するモデルを構築するライブラリという認識です。
そしてTensorflow Liteとは
Liteという名前の通り軽量版で、Tensorflowで作ったモデルから変換・作成されます。
学習はTensorflowで行って、そこから出力されたTensorflow Liteのモデルを使って推測を行うもので、モバイル環境での使用を想定して開発されています。
モバイル環境ではCPUやメモリ、ストレージなど様々なリソースに制限がありますので「学習をモバイル端末では行わない」かつ「軽量」なのがミソなのだと思います。
Tensorflowの環境構築
Tensorflowを扱えないと、Tensorflow Liteの独自モデル作成もできないと分かりましたので、まずmacOS High SierraでPythonおよびTensowflowの環境構築をしていきます。目標は独自モデルの作成ですが、まずはHello Worldです。
macOSのデフォルトではPython2系のため、3系をインストールします。
また
Command Line tools
、
homebrew
はインストール済みの前提で進めていきます。
pyenv, pyenv-virtualenvをインストール
rbenvやphpenvと同様に、Pythonのバージョンを簡単に切り替えるための
pyenv
,
pyenv-virtualenv
をインストールします。
1 2 | $ brew install pyenv $ brew install pyenv-virtualenv |
1 2 3 4 5 6 7 8 9 | $ vi ~/.bash_profile # 以下3行を.bash_profileの末尾に追記します export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" # 設定反映 source ~/.bash_profile |
続いてPythonの最新版(記事作成時点で3.7.0)をインストールします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # インストールできるバージョン一覧を表示 $ pyenv install -l Available versions: 2.1.3 2.2.3 2.3.7 2.4 2.4.1 ... 3.6.5 3.6.6 3.7.0 3.7-dev 3.8-dev ... stackless-3.4-dev stackless-3.4.1 stackless-3.4.2 stackless-3.4.7 # インストール $ pyenv install 3.7.0 # Shims更新 $ pyenv rehash |
pyenv install 3.7.0 でエラーになる場合
Xcode command line tools
がインストールされていないと、
zipimport.ZipImportError: can't decompress data; zlib not available
というエラーが出ますので、以下のコマンドでインストールしましょう。
1 | $ xcode-select --install |
Tensorflow用の環境を作成する
1 2 3 4 5 6 7 | $ pyenv virtualenv 3.7.0 TensorFlow $ pyenv rehash $ pyenv global TensorFlow # 確認 $ python --version Python 3.7.0 |
pip, Tensorflowインストール
pipはPythonのパッケージ管理システムです。rubyのgem, phpのcomposerですね。
TensorflowはPythonのライブラリですので、pipでインストールします。
1 2 3 4 | $ easy_install pip $ easy_install --upgrade six $ pip install --upgrade pip $ pip3 install --upgrade tensorflow |
Hello World
ここまで来たら動作確認です。Pythonの対話形式でコードを実行します。
1 2 3 4 | $ python >>>> import tensorflow as tf >>>> hello = tf.constant('Hello TensorFlow!') >>>> sess = tf.Session() |
ここまで実行したところで、私の環境(MacBook Pro 2017)では
2018-08-21 23:14:01.418426: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
というWarningが出ました。
ひとまず無視して以下のコードを実行し、ひとまず動くことは確認できました。
1 2 3 | >>>> print (sess.run(hello)) 'Hello TensorFlow!' >>>> |
Warningの内容について
エラーメッセージで検索してみると、ズバリな記事がありました。
macOS で「this TensorFlow binary was not compiled to use: AVX2 FMA」エラー
ざっくり言うと「精度と速度があまり出ないけどスルーしても動く」というものでした。
もう少し詳しく説明すると
AVX2
や
FMA
はCPUの拡張命令の一種で、私のMacBook Proでは対応しているものの、pip経由でインストールしたTensorflowのバイナリが非対応だったようです。
さいごに
いかがでしたでしょうか。「Android端末上でMLKitを動かす」という目的から始まった学習ですが、PythonやTensorflowにも手を伸ばすことになりました。
まだHello Worldの段階なので、ここから実際にどうモデルを作るのかとなると、正直なところよく理解できていません(「ひたすらデータを大量に食わせれば精度が上がる」程度の雑な認識でした…)。
機械学習入門として真っ先に候補となる分野は画像認識ですが、個人的には会話AIにも興味があります。必要な知識の膨大さにとにかく圧倒されている現状ですが、引き続き学んでいきます。
参考
- 【Tensorflow入門】適当にTensorflowを理解して、モデルを作ってみる
- 画像認識モデルを作るための鉄板レシピ
- 機械学習をこれから始める人に押さえておいてほしいこと
- 特にプログラマーでもデータサイエンティストでもないけど、Tensorflowを1ヶ月触ったので超分かりやすく解説
- Python3 TensorFlow for Mac 環境構築
- macOS で「this TensorFlow binary was not compiled to use: AVX2 FMA」エラー