답변:
모델을 컴파일 할 때 지정한 모든 메트릭 함수를 사용할 수 있습니다.
다음과 같은 메트릭 기능이 있다고 가정 해 봅시다.
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에 사용할 수도 있습니다.
물론, 나만의 것을 만드십시오!
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에 대한 수입하지 않습니다.