2016-10-16 8 views
1

私はCNNを実装しました。私は動作確認されたカスタムコールバックを作ったが、問題がある。Kerasコールバックの変数へのアクセス

これはサンプル出力です。反復5の 例(単純10,000のバッチサイズ)

50000/60000 [========================>.....] - ETA: 10s ('new lr:', 0.01) 

('accuracy:', 0.70) 

I 2つのコールバック(出力に示すように動作する試験)を有する: (1)各反復で学習速度を変更します。 (2)反復ごとに精度を印刷します。

私は正確さを取り入れて学習率を決定する外部スクリプトを持っています。

質問: 外部スクリプトがアクセスできるように利用可能な各繰り返しで精度を上げるにはどうすればよいですか?本質的には、各繰り返しでアクセシブルな変数です。プロセスがAccuracyCallback.accuracy

で終わったら、私は私が変更学習率を渡すことができます 問題だけそれにアクセスすることができますよ。しかし、これが各反復でアクセシブル変数の形で渡されると、どのようにして精度を得ることができますか?

私の外部スクリプトは、反復1:0.01で学習率を決定します。 print文の代わりに反復1で、外部スクリプトのアクセス可能変数としてどのように精度を取得するのですか?

答えて

0

あなたはlogs.get('acc')が動作するためにはcreate your own callback

class AccCallback(keras.callbacks.Callback): 

    def on_batch_end(self, batch, logs={}): 
     accuracy = logs.get('acc') 
     # pass accuracy to your 'external' script and set new lr here 

をすることができ、あなたはそれを監視するためにKerasを伝える必要があります:

model.compile(optimizer='...', loss='...', metrics=['accuracy']) 

最後には、accuracyの種類がここndarrayであることに注意してください。問題が発生した場合は、ラップしてください:float(accuracy)

+0

私は前述のように作成しました。しかし、問題は、私は学習率である2番目のコールバックがあることです。 – Ritchie

+0

私はこれらの2つのコールバックを書くことができれば、なぜそれらを1つの方法にマージしないのですか?それがはっきりしない場合は、あなたの質問を編集し、学習率を設定するために使用するコールバックのコードを追加して、それをマージする方法を見てください。 –

関連する問題