Post on 23-Jan-2018
機械学習初学者が短期間でTENSORFLOWで作ったMNISTモデルをANDROIDアプリに組み込んだ話
2018/01/16
まえすとろ
WHO AM I?
• Name: まえすとろ
• Androidエンジニアとして働いています
• 過去にOR系の業務をしていましたが…
• 大学院では純粋数学で作用素環論という分野を専攻。
• Twitter: @maestro_L_jp
今回話す内容
• 手書き画像(0-9)から数字を
推測するロジック(いわゆる
MNISTのモデル)をAndroid
端末上で動かすアプリ作りま
した。
• 数日でこれ作りました。。。(苦労した…)
デモ
•今回はこのアプリを作るのに使った技術について話します。
• KerasによるTensorFlowモデルの作成
• TensorFlowモデルをAndroid上で動かすための方法
KerasによるTensorFlowモデルの作成
Kerasとは?
• TensorFlow, Theanoなどをバックエンドにとした、ニューラルネット用ラッパーライブラリ。
• https://keras.io/ja/
• TensorFlowのAPIをそのまま使うより簡単でかつ直感的に書ける!
• 初学者にはもってこい。
• Qiitaの記事とかみるとKerasを使ってサンプルあげてたりするものが結構ある。
• ちょっと発展したことをやろうとした時に、実践的な記事から学んでアウトプットにすぐに反映させやすい。
「分類」を行う場合は、ラベルは1次元から
「ラベルnに入る確信度」を表す10次元のデータに変換。
Model.fitで実際の学習処理を行うが、その前にModel自
体を確定するためにModel.complieを実行する。
• 学習したmodelを保存するにはModel#saveでパスを指定して
保存できる。
• ファイル形式はHDF5。(拡張子は.h5)
• Keras本体とは別にh5pyをインストールしないといけない。
• しかし、HDF5形式のモデルはTensorFlowでは直接は扱えな
い!
HDF5形式のモデル
export load
• HDF5をTensorFlowで読める形式(pbファイル)に変換する必要
あり。
• https://github.com/icchi-h/keras_to_tensorflow
HDF5形式のモデル
exportload
pb形式のモデル
「KerasToTensorFlow」というライブラリで変換。
TensorFlowモデルをAndroid上で動かすための方法
tensorflow-androidを使う
• NDKのセットアップなしでTensorFlowモデルを
Android上で使えるようにするためのライブラリ。
• 2017年5月のGoogle I/O 2017で発表された。
tensorflow-androidの導入
• 1. build.gradleの設定する
この1行を追記
• 2. TensorFlowInferenceInterfaceオブジェクトを使ったクラス作成。
Feedに入力するべき値や、fetchに入力するべき値はh5のモデル変換時に出てきたpb.asciiファイルに記載されているのでそ
こを参照にしていすること。
まとめ
• Kerasを使えば機械学習のコーディングとか慣れていなくても手っ取り
早く実装+検証ができる!
• tensorflow形式であればモデルのAndroidへの組み込みは容易になった。
•今後、Keras+tensorflow-androidを使ってどんどん
機械学習を使ったアプリとか作っていきたい!
今回作ったアプリとスクリプトのURL
• MnistAndroid
• https://github.com/LyricalMaestro/MnistAndroid
• モデル生成スクリプト
• https://github.com/LyricalMaestro/tensor-flow-mnist-model-
for-android-maker
参考文献
• https://qiita.com/icchi_h/items/c37b52a3eb926d63f917
• https://qiita.com/yampy/items/706d44417c433e68db0d
• https://qiita.com/uramonk/items/c207c948ccb6cd0a1346