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

21
機械学習初学者が短期間で TENSORFLOWで作ったMNISTモデル をANDROIDアプリに組み込んだ話 2018/01/16 まえすとろ

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

Page 1: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

機械学習初学者が短期間でTENSORFLOWで作ったMNISTモデルをANDROIDアプリに組み込んだ話

2018/01/16

まえすとろ

Page 2: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

WHO AM I?

• Name: まえすとろ

• Androidエンジニアとして働いています

• 過去にOR系の業務をしていましたが…

• 大学院では純粋数学で作用素環論という分野を専攻。

• Twitter: @maestro_L_jp

Page 3: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

今回話す内容

• 手書き画像(0-9)から数字を

推測するロジック(いわゆる

MNISTのモデル)をAndroid

端末上で動かすアプリ作りま

した。

• 数日でこれ作りました。。。(苦労した…)

Page 4: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

デモ

Page 5: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

•今回はこのアプリを作るのに使った技術について話します。

• KerasによるTensorFlowモデルの作成

• TensorFlowモデルをAndroid上で動かすための方法

Page 6: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

KerasによるTensorFlowモデルの作成

Page 7: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

Kerasとは?

• TensorFlow, Theanoなどをバックエンドにとした、ニューラルネット用ラッパーライブラリ。

• https://keras.io/ja/

• TensorFlowのAPIをそのまま使うより簡単でかつ直感的に書ける!

• 初学者にはもってこい。

• Qiitaの記事とかみるとKerasを使ってサンプルあげてたりするものが結構ある。

• ちょっと発展したことをやろうとした時に、実践的な記事から学んでアウトプットにすぐに反映させやすい。

Page 8: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話
Page 9: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

「分類」を行う場合は、ラベルは1次元から

「ラベルnに入る確信度」を表す10次元のデータに変換。

Page 10: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話
Page 11: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

Model.fitで実際の学習処理を行うが、その前にModel自

体を確定するためにModel.complieを実行する。

Page 12: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

• 学習したmodelを保存するにはModel#saveでパスを指定して

保存できる。

• ファイル形式はHDF5。(拡張子は.h5)

• Keras本体とは別にh5pyをインストールしないといけない。

• しかし、HDF5形式のモデルはTensorFlowでは直接は扱えな

い!

HDF5形式のモデル

export load

Page 13: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

• HDF5をTensorFlowで読める形式(pbファイル)に変換する必要

あり。

• https://github.com/icchi-h/keras_to_tensorflow

HDF5形式のモデル

exportload

pb形式のモデル

「KerasToTensorFlow」というライブラリで変換。

Page 14: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

TensorFlowモデルをAndroid上で動かすための方法

Page 15: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

tensorflow-androidを使う

• NDKのセットアップなしでTensorFlowモデルを

Android上で使えるようにするためのライブラリ。

• 2017年5月のGoogle I/O 2017で発表された。

Page 16: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

tensorflow-androidの導入

• 1. build.gradleの設定する

この1行を追記

Page 17: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

• 2. TensorFlowInferenceInterfaceオブジェクトを使ったクラス作成。

Page 18: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

Feedに入力するべき値や、fetchに入力するべき値はh5のモデル変換時に出てきたpb.asciiファイルに記載されているのでそ

こを参照にしていすること。

Page 19: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

まとめ

• Kerasを使えば機械学習のコーディングとか慣れていなくても手っ取り

早く実装+検証ができる!

• tensorflow形式であればモデルのAndroidへの組み込みは容易になった。

•今後、Keras+tensorflow-androidを使ってどんどん

機械学習を使ったアプリとか作っていきたい!

Page 20: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

今回作ったアプリとスクリプトのURL

• MnistAndroid

• https://github.com/LyricalMaestro/MnistAndroid

• モデル生成スクリプト

• https://github.com/LyricalMaestro/tensor-flow-mnist-model-

for-android-maker

Page 21: 機械学習初学者が短期間でTensor flowで作ったmnistモデルをandroidアプリに組み込んだ話

参考文献

• https://qiita.com/icchi_h/items/c37b52a3eb926d63f917

• https://qiita.com/yampy/items/706d44417c433e68db0d

• https://qiita.com/uramonk/items/c207c948ccb6cd0a1346