本日は、機械学習の学習中に操作をするCallbackについてです。
機械学習を勉強し初めの時に、混乱していたことの1つが、どんなデータのやり取りが行われているのか、分からない。と、言ったことでした。
特に、モデルの学習中には、一度学習をスタートすると、何だか分からないけれども指定したエポック数だけ処理されている。といった感覚でした。
そんな、中でモデルの学習中に、操作を行うことが出来る関数の集合がCallbackです。
詳細は、Kerasのオフィシャルで
■コールバック
https://keras.io/ja/callbacks/#modelcheckpoint
Callbackは、幾つかの目的の為に使われます。
・学習途中に、過学習を抑制するために、操作を停止したり、学習率を低下させる
・学習途中の内部の処理情報を可視化 or 保存させる
■KerasでCallbackをモデル学習にセットする方法
kerasでモデル学習する際には、
・model.fit()
・model.fit_generator()
2つのどちらかを利用すると思いまします。
2つの違いにはついては下記を参照
KerasでCallbackをモデル学習にセットさせる方法は、シンプルで
model.fit( callbacks= ) / model.fit_generator(callbacks=) の引数 callbacks= に対して、Keras.callbacks.Callback にあるインスタンスのリストを記載します。
例えば、よく使うのでいうと
ModelCheckpoint:学習中のモデルを保存することが出来る
EarlyStopping:学習中に値の変化が停止した時に訓練を終了出来る
TensorBoard:TensorBoardで可視化
■ColaboratoryでCallbackを用いて、学習中のモデルを保存
ModelCheckpointを使用して、学習中のモデルを保存してみましょう。
Colaboratoryで新規のフォルダを作成します。
フォルダ名称をlogとします。 パス : ‘/content/log’
このlogフォルダの中に格納していきます。
#保存するファイル名称の設定 ckpt_name = 'weights-{epoch:02d}-{loss:.2f}-{accuracy:.2f}-{val_loss:.2f}-{val_accuracy:.2f}-.hdf5' log_dir='/content/log' # modelのデータ格納場所 #ModelCheckpointのインスタンス化 cbcheck = ModelCheckpoint(os.path.join(log_dir, ckpt_name), monitor='val_acc', verbose=0, save_best_only=False, save_weights_only=True, mode='auto', period=1)
この、ModelCheckpointをインスタンス化した、cbcheckを、fitの引数に設定します。
#色々と省略して
model.fit(callbacks= cbcheck)
そうすると、
log_dir=’/content/log’ # modelのデータ格納場所
の箇所にエポック毎に(period=1で設定)モデルが保存されております。
学習のモデルを操作できたり、可視化出来たりすることで
機械学習への距離感が少し縮まりました。
途中経過のモデルを活用して、predictしてみるのも面白いかと思います。