Keras를 사용하여 프로젝트를 위해 신경망을 훈련하고 있습니다. Keras는 조기 중지 기능을 제공했습니다. 조기 중지를 사용하여 신경망이 과적 합되는 것을 방지하기 위해 어떤 매개 변수를 관찰해야하는지 알 수 있습니까?
답변:
조기 중지는 기본적으로 손실이 증가하기 시작하면 (즉, 유효성 검사 정확도가 감소하기 시작하면) 훈련을 중지하는 것입니다. 문서 에 따르면 다음과 같이 사용됩니다.
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=0,
verbose=0, mode='auto')
값은 구현 (문제, 배치 크기 등)에 따라 다르지만 일반적으로 과적 합을 방지하기 위해 사용합니다.
monitor
인수를 로 설정하여 유효성 검사 손실을 모니터링합니다 (교차 유효성 검사 또는 최소한 훈련 / 테스트 세트를 사용해야 함) 'val_loss'
.min_delta
일부 시대의 손실을 개선으로 정량화할지 여부에 대한 임계 값입니다. 손실의 차이가. 이하 min_delta
이면 개선이없는 것으로 정량화됩니다. 손실이 악화 될 때 관심이 있으므로 0으로 두는 것이 좋습니다.patience
인수는 손실이 증가하기 시작하면 (개선이 중지됨) 중지되기 전 에포크 수를 나타냅니다. 이것은 구현에 따라 다르며, 매우 작은 배치
또는 큰 학습률 을 사용하는 경우 손실 지그재그 (정확도는 더 시끄러움)이므로 큰 patience
인수를 설정하는 것이 좋습니다 . 큰 배치 와 작은 학습률 을 사용하면 손실이 더 부드러워 져 더 작은 patience
인수를 사용할 수 있습니다 . 어느 쪽이든 2로 남겨 두어 모델에 더 많은 기회를 줄 것입니다.verbose
인쇄 할 내용을 결정하고 기본값 (0)으로 둡니다.mode
인수는 모니터링 된 수량의 방향 (감소 또는 증가)에 따라 달라집니다. 손실을 모니터링하므로 min
. 하지만 keras가 우리를 위해 처리하도록 놔두고auto
그래서 저는 이와 같은 것을 사용하고 조기 중지를 사용하거나 사용하지 않고 오류 손실을 플로팅하여 실험합니다.
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=2,
verbose=0, mode='auto')
콜백 작동 방식에 대한 모호성을 위해 더 설명하려고합니다. fit(... callbacks=[es])
모델 을 호출하면 Keras는 지정된 콜백 객체에 미리 지정된 함수를 호출합니다. 이 함수를 호출 할 수 있습니다 on_train_begin
, on_train_end
, on_epoch_begin
, on_epoch_end
와 on_batch_begin
, on_batch_end
. 조기 중지 콜백은 모든 Epoch 종료시 호출되며, 최상의 모니터링 값을 현재 값과 비교하고 조건이 충족되면 중지됩니다 (최적 모니터링 값을 관찰 한 이후 몇 Epoch가지나 갔는지 인내 인수 이상입니까? 마지막 값은 min_delta 등보다 큽니다.).
@BrentFaust가 주석에서 지적했듯이 모델의 학습은 조기 중지 조건이 충족되거나 epochs
매개 변수 (기본값 = 10) 가 충족 될 때까지 계속됩니다 fit()
. 조기 중지 콜백을 설정해도 모델이 epochs
매개 변수 이상으로 학습되지 않습니다 . 따라서 fit()
더 큰 epochs
값으로 함수를 호출 하면 Early Stopping 콜백에서 더 많은 이점을 얻을 수 있습니다.
callbacks=[EarlyStopping(patience=2)]
신 (新) 시대가 부여되지 않는 한, 아무 효과가 없습니다 model.fit(..., epochs=max_epochs)
.
epoch=1
가이 콜백이 실패하는 for 루프 (다양한 사용 사례의 경우)에서 fit with 를 호출하는 경우가있을 수 있음을 깨달았습니다 . 내 대답에 모호성이 있으면 더 나은 방식으로 설명하려고 노력할 것입니다.
restore_best_weights
학습 후 최적의 가중치로 모델을로드하는 인수 (아직 문서에 없음)를 사용할 수 있습니다 . 그러나 귀하의 목적을 위해 ModelCheckpoint
콜백을 save_best_only
인수 와 함께 사용 합니다. 문서를 확인할 수 있습니다. 사용하기는 간단하지만 훈련 후 최고의 가중치를 수동으로로드해야합니다.
min_delta
는 모니터링 된 값의 변화를 개선으로 정량화할지 여부에 대한 임계 값입니다. 그래서 예, 우리가 주면monitor = 'val_loss'
현재 검증 손실과 이전 검증 손실의 차이를 나타냅니다. 실제로min_delta=0.1
0.1보다 작은 유효성 검사 손실 (현재-이전)을 줄이면 정량화되지 않으므로 훈련이 중지됩니다 (있는 경우patience = 0
).