Keras의 Early Stopping 콜백에서 사용하는 메트릭을 변경해야합니까?


13

Keras 교육에서 Early Stopping 콜백을 사용하는 경우 일부 메트릭 (일반적으로 유효성 검증 손실)이 증가하지 않으면 중지됩니다. 검증 손실 대신 다른 측정법 (정밀도, 리콜, f- 측정)을 사용하는 방법이 있습니까? 지금까지 본 모든 예제는 다음과 비슷합니다. 콜백 .EarlyStopping (monitor = 'val_loss', patience = 5, verbose = 0, mode = 'auto')

답변:


11

모델을 컴파일 할 때 지정한 모든 메트릭 함수를 사용할 수 있습니다.

다음과 같은 메트릭 기능이 있다고 가정 해 봅시다.

def my_metric(y_true, y_pred):
     return some_metric_computation(y_true, y_pred)

이 함수의 유일한 요구 사항은 실제 y와 예측 된 y를 받아 들여야한다는 것입니다.

모델을 컴파일 할 때 '정확도'와 같은 메트릭에서 빌드를 지정하는 방법과 유사하게이 메트릭을 지정합니다.

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

''정확도 '의 빌드와 달리' '없이 my_metric 함수 이름을 사용하고 있습니다.

그런 다음 EarlyStopping을 정의하는 경우 함수 이름 만 사용하십시오 (이번에는 '').

EarlyStopping(monitor='my_metric', mode='min')

모드를 지정하십시오 (낮은 것이 좋을수록 최소, 높을수록 좋습니다).

내장 메트릭과 마찬가지로 사용할 수 있습니다. 이것은 아마도 ModelCheckpoint와 같은 다른 콜백과도 작동합니다 (그러나 테스트하지는 않았습니다). 내부적으로 Keras는 함수 이름을 사용하여이 모델에 사용 가능한 메트릭 목록에 새 메트릭을 추가합니다.

model.fit (...)에서 유효성 검증을 위해 데이터를 지정하면 'val_my_metric'을 사용하여 EarlyStopping에 사용할 수도 있습니다.


3

물론, 나만의 것을 만드십시오!

class EarlyStopByF1(keras.callbacks.Callback):
    def __init__(self, value = 0, verbose = 0):
        super(keras.callbacks.Callback, self).__init__()
        self.value = value
        self.verbose = verbose


    def on_epoch_end(self, epoch, logs={}):
         predict = np.asarray(self.model.predict(self.validation_data[0]))
         target = self.validation_data[1]
         score = f1_score(target, prediction)
         if score > self.value:
            if self.verbose >0:
                print("Epoch %05d: early stopping Threshold" % epoch)
            self.model.stop_training = True


callbacks = [EarlyStopByF1(value = .90, verbose =1)]
model.fit(X, y, batch_size = 32, nb_epoch=nb_epoch, verbose = 1, 
validation_data(X_val,y_val), callbacks=callbacks)

나는 이것을 테스트하지 않았지만 그것이 당신이 그것에 대해 어떻게하는지에 대한 일반적인 맛이어야합니다. 그래도 문제가 해결되지 않으면 주말에 다시 시도해 보겠습니다. 또한 자신의 f1 점수가 이미 구현되어 있다고 가정합니다. 그냥 sklearn에 대한 수입하지 않습니다.


+1 여전히 최신 Keras 및 Python 3.7을 사용하여 2/11/2020부터 작동
Austin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.