#Kerasでモデル作った
Kerasで良さげなモデルを作ってiOSアプリで動かしたくなったら、coremltoolsを使ってh5ファイルを変換してあげましょう。
※今回はクラス分類するモデルなのでクラスラベル一覧が書かれているtxtファイルも読み込みます。
import coremltools
coremltools.converters.keras.convert('hoge.h5', class_labels='label.txt').save('hoge.mlmodel')
そして、出力したmlmodelをswiftプロジェクトに突っ込むだけでMLModelクラスとして使用できます。あとはクラスのインスタンス作ってデータを入力するだけのはずなんですが、何故か入力データの形式が合わないようで上手くいきません(今回のモデルinputは二次元行列でちゃんとデータもそれに合わせて成形しているのですが……)。
ここでCoreMLモデルのinputに使われるMLMultiArrayのリファレンスをよく見てみると、NSNumberの一次元配列になっているではないですか。
しょうがないので、Keras側でのモデル入力は一次元とし、モデル内部でReshape層をaddしてデータを二次元に戻してあげます。
model.add(Reshape((row, column), input_shape=(row*column,)))
これで出力したh5をmlmodelに変換してデータ入力するとモデルが無事動きました!やらしい!
#参考
https://apple.github.io/coremltools/generated/coremltools.converters.keras.convert.html
https://qiita.com/akimach/items/d43cd04b5de5fa99bb6a
→自分がハマったとこにも言及されていました!
#おまけ
CoreMLを使うことでこんな使い方ができたり。
http://hahaeatora.hateblo.jp/entry/2018/10/14/183000