機械学習初学者が短期間でTensor...

Post on 23-Jan-2018

69 views 0 download

Transcript of 機械学習初学者が短期間でTensor...

機械学習初学者が短期間で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