FC2ブログ

頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


Kerasのコールバック関数内で係数にアクセスする

Kerasで係数の保存と読み込み
↑Kerasでの学習結果をファイルに保存はできた(※1)。

それらを強化学習用にmacOSアプリで読み込みたい。
調べるとcoremltoolsなるものを使ってmlmodelに変換できるらしいのだが、、、噂通り難易度が高く、、、pipでインストールするもエラー出まくりで、、、はい、諦めました、、、😭

いや待て、そもそも学習中の係数にアクセスしてそのまま保存してやればいいんじゃね?モデル構成なんかいらんし、実際強化学習となればいちいち変換なんてやってらんねえぞ。
ということで

(1)学習中に呼び出される関数の設定
(2)コールバック関数で係数にアクセス

この二つが可能か調べた。


(1)学習中に呼び出される関数の設定
これは前記事にあるようなコールバック関数でよさそう。リファレンス(※2)にサンプルコードもある。
class TestCallbackFunction(keras.callbacks.Callback) :
    def on_epoch_end(self, epoch, logs={}) :
        print("on_epoch_end [%d]"%epoch)
↑呼び出されてほしい関数を作っておいて
test_cb = TestCallbackFunction()
↑設定して前記事と同様fitで渡してやる。

すると、1epoch終了ごとにこの関数が呼び出されてる!よしよし。


(2)コールバック関数で係数にアクセス
いろいろ調べた結果、、、
class TestCallbackFunction(keras.callbacks.Callback) :
    def on_epoch_end(self, epoch, logs={}) :
        print("on_epoch_end [%d]"%epoch)
        lastLayer = self.model.layers[-1]
        print(lastLayer.get_weights())
↑モデルオブジェクトにはself.modelでアクセスできる。
modelを構成する層はlayersで取得できるので、一番最後の層を
lastLayer = self.model.layers[-1]
として取得してる。-1で最後のを指定できるって最近覚えました。
layerの係数は get_weights() でアクセス。

Kerasの出力

↑実行結果、とりあえずウエイトとバイアスの出力まではできた!
それにしてもKerasの日本語リファレンスは親切だねえ。


※1
前記事ではモデルと学習後の係数を別々に保存してるけど実は一度にできるらしい。
model.save(f_dir + “model_and_weights.h5”)
↑これでモデルも係数もいけた。

※2
コールバック - Keras Documentation



<< daeファイルはアプリのビルド時に圧縮される?  TopPage  ファミリー共有してるアプリのアプデができなくなった >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1182-5b1e5a59




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad