OngaLog

最近GOが楽しくて、

Keras 事はじめ

Kerasを使ってCSVから読み込んだデータを元にしてmodelの学習及びserver化を実行してみる。

https://keras.io/ja/

train.py

データはcsvから読み込んでみました。tensorflowの場合はload_csv_with_headeというメソッドからcsvを読み込んでいましたが、kerasには専用のmehodが用意されていないようなので、numpyのgenfromtxtの機能を使って読み込んでみる。load_csv_with_headeと同じように、最終行を正解値として設定。dtype=intとしているのだけど、float型が混じっていた場合どうでるべきなのだろうか、ひとまず今回はint型のみで完結するデータを作成してみました。

X = genfromtxt('./some.csv',
               delimiter=',',
               skip_header=1,
               usecols=(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14),
               dtype=int)
Y = genfromtxt('./some.csv',
               delimiter=',',
               skip_header=1,
               usecols=(15),
               dtype=int)

input_dimデータ形式に従って15に設定、output_dimは30に、ここはチューニグが必要そう、今回のデータ量ではoutputの値によって精度が変わっている様子は見受けられなかったので、全体的な把握がまだできていないかもしれない。

model.add(Dense(input_dim=15, output_dim=30))

学習したmodelを使って、predictを実行、5000回のepochでそこそこ精度はでるようになりました。

results = model.predict_proba(np.array(
    [
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    ]
))

学習データを保存する為にsave_weightsでデータを保存、HDF5形式のファイルで保存される。ただ、詳細はわかっていないのだけど、互換性のあるデータなのだろうか。

model.save_weights('./learnedModel')

server.py

まず、作成済みのモデル定義を読み込み。

 Sequential.from_config()

次に、学習済みの重みを読み込み。

model.load_weights

以上の手順で無事server化に成功。 学習データを再現したAPIサーバーも手軽に立てる事ができそうです。

github.com