以前 TensorFlow Lite の Go バインディングを書いたのだけど
Big Sky :: TensorFlow Lite の Go binding を書いた。
Google launches TensorFlow Lite 1.0 for mobile and embedded devices | VentureBeat Google today intro...
https://mattn.kaoriya.net/software/lang/go/20190307190947.htm
これの mruby 版を作ってみました。
GitHub - mattn/mruby-tflite
model = TfLite :: Model .from_file " xor_model.tflite " interpreter = TfLite :: Interpreter . new (m...
https://github.com/mattn/mruby-tflite
TensorFlow Lite がライブラリ単体として配布されていないので、ビルドは少し難しいですが頑張って下さい。使い方は簡単です。以下 XOR (排他的論理和) なモデルの作り方と、そのモデルを使って推論する Ruby スクリプトを紹介します。keras で XOR... は説明が長くなるので省略します。知りたい方は調べて下さい。
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD
model = Sequential()
model.add(Dense(8, input_dim=2))
model.add(Activation('tanh'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
sgd = SGD(lr=0.1)
model.compile(loss='binary_crossentropy', optimizer=sgd)
X = np.array([[0,0],[0,1],[1,0],[1,1]])
y = np.array([[0],[1],[1],[0]])
model.fit(X, y, verbose=True, batch_size=1, nb_epoch=1000)
model.save('xor_model.h5')
HDF5 なファイルを吐けば TFLiteConverter を使って TensorFlow Lite のモデルファイルが生成出来ます。
import tensorflow as tf
import tensorflow.contrib.lite as lite
converter = lite.TFLiteConverter.from_keras_model_file("xor_model.h5")
tflite_model = converter.convert()
open("xor_model.tflite", "wb").write(tflite_model)
TensorFlow Lite の C API を wrap する形にしてあるので、API を知ってる人なら使いやすいと思います。以下は生成されたモデルファイルを使って XOR を推論するサンプルです。
model = TfLite::Model.from_file "xor_model.tflite"
interpreter = TfLite::Interpreter.new(model)
interpreter.allocate_tensors
input = interpreter.input_tensor(0)
output = interpreter.output_tensor(0)
[[0,0], [1,0], [0,1], [1,1]].each do |x|
input.data = x
interpreter.invoke
puts "#{x[0]} ^ #{x[1]} = #{output.data[0].round}"
end
リポジトリには FizzBuzz を扱う例も置いてあるので Ruby で TensorFlow Lite やりたかった人(いるのか)には嬉しいかもしれません。ただ残念ながら現状 MRuby の gems には画像を描画できる物が無かったので顔認識の様な物を簡単に作る事が出来ませんでした。これは別途 gem が出来れば実現できるはずです。