2016-10-16 52 views
1

所以我實施了CNN。我做了自定義回調,確認工作,但我有一個問題。在Keras回調中訪問變量

這是一個示例輸出。迭代5(10000批量大小爲簡單起見)

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

('accuracy:', 0.70) 

的 例I具有2個回調(測試如圖中輸出工作): (1)改變在每次迭代學習率。 (2)在每次迭代中打印精確度。

我有一個外部腳本,通過考慮準確性來確定學習率。

問題: 如何使每次迭代的準確性都可用,以便外部腳本可以訪問它?本質上是每次迭代時可訪問的變量。我能夠訪問它只有一次的過程就結束了與AccuracyCallback.accuracy

問題 我可以通過一個不斷變化的學習速率。但是,一旦在每次迭代中以可訪問變量的形式傳遞,我該如何獲得準確度?

例子 我的外部腳本決定迭代1:0.01的學習率。我如何在迭代1而不是打印語句中獲得外部腳本中的可訪問變量的準確性?

回答

0

可以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 

爲了logs.get('acc')工作,你必須告訴Keras對其進行監控:

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

最後,注意,accuracy類型是ndarray這裏。如果它引起你的任何問題,我建議包裝它:float(accuracy)

+0

我已經創建了一個前面提到的。但問題是,我有第二個回調是學習率。 – Ritchie

+0

我不太明白,如果你能寫這兩個回調函數,爲什麼不把它們合併成一個單一的方法呢?如果不清楚,請編輯您的問題並添加用於設置學習率的回調代碼,以便我可以看到如何合併它。 –