Non-engineer memoblog

エンジニアではない人間のメモブログ(備忘録とアウトプット欲のために)

Kerasの学習メモ

しばらく時間が立ってしまいましたが、改めてKerasを学習して忘れないうちにメモ。

今回はAIスタートアップで就業している方にいろいろ教えてもらえて細かい部分がとても参考になった。

モデル読み込みと利用

以前に別途作成したモデル hoge.h5 を読み込みして使おうとしたら、

ValueError: No model found in config file.

と怒られてしまった。エラーそのままググってみると、

Unable to load model from .h5 file · Issue #6937 · keras-team/keras · GitHub
Python - kerasのモデルのload_modelでエラー(ValueError: Unknown initializer: weight_variable)(112052)|teratail

で書かれていることを参考に、

# 以前のコード
model.save_weights(hdf5_file)

model.save(hdf5_file)

に変更してから再度学習 → エラーが消えて動いた(ほんとにこれが原因だったのだろうか?)

batch_sizeについて

history = model.fit(X, y, batch_size=8, nb_epoch=3, validation_split=0.1)

以前にbatch_sizeのことがいまいち分からなかったのでメモ。
st-hakky.hatenablog.com

サラッと読むと↑の記事では、batch_sizeは一度に計算する量だけど、

512だと学習速度をあげたかったのかなという気持ちが見えます。

自分だけで読んでいたら↑の記述の感覚がよく分からなかった。よくよく読んで見ると

1epochの計算速度が変わります(ここでいっているのは、学習の収束の速さなどではなく、単純に計算速度の話です)。パラメーターの更新の回数というのが、ミニバッチのサイズが小さいほど多くなるので、これは当然と言えば当然です。

ミニバッチ単位でデータを読みとり、それを使うとなると、これはミニバッチのサイズが大きければ大きいほど、メモリの使用量を食います。

と記載あり、わかったような分からなかったような気でいましたが、要するにパラメータ更新という計算リソース上のオーバーヘッドがごっそり減るか否かということだとわかった。また分散も少なくなることから、batch_sizeを多くした方が良さそうな感じもしていたけど、

メモリがないとかえって遅くなる

ということを教えてもらえた。

あとはこのあたりを少し。

model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
  • 最適化は計算リソースの制約があればSGDを使用する
  • acc と loss など数値の見かた
  • Google Colaboratoryの利用方法(超基礎)
  • metricsは主に以下2つがある
    • binary_accuracy → 2クラス
    • categorical_accuracy → 多クラス(マルチクラス)

などなど。