2016-10-16 2 views
1

Итак, у меня есть CNN. Я сделал пользовательские обратные вызовы, которые были подтверждены, но у меня есть проблема.Доступ к переменной в обратном вызове Keras

Это образец вывода. Пример итерации 5 (периодического размером 10000 для простоты)

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

('accuracy:', 0.70) 

У меня 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

Я не совсем понимаю, если вы смогли написать эти два обратных вызова, почему бы вам не объединить их в один единственный метод? Если это неясно, отредактируйте свой вопрос и добавьте код для обратного вызова, который вы используете для установки скорости обучения, поэтому я вижу, как его объединить. –

Смежные вопросы