군침이 싹 도는 코딩

EarlyStopping 라이브러리 사용법 본문

Python/Deep Learning

EarlyStopping 라이브러리 사용법

mugoori 2022. 12. 28. 15:55

# 위 그래프를 보면 X 축의 에포크가 계속 반복되어도 어느지점에 도달하면

더이상 성능 향상이 이루어지지 않는것을 확인할 수 있다.

이 지점을 찾아 자동으로 멈춰주는 기능이 얼리스탑핑 라이브러리이다.

 

 

 

 

early_stop = tf.keras.callbacks.EarlyStopping(monitor='val_loss',patience=10)

# 사용 코드는 다음과 같다

텐서플로우/케라스/콜백/얼리스탑핑 파라미터는 모니터는 벨리데이션 로스로

페이션스는 설정값을 주면 그 값만큼의 에포크를 반복하는동안

성능 향상이 없으면 멈춘다는 파라미터이다.

이렇게 얼리스탑이라는 변수를 만들어준다

 

 

 

 

epoch_history = model.fit(X_train,y_train,epochs=100000,validation_split=0.2,callbacks=[early_stop])
>>>
Epoch 1/100000
8/8 [==============================] - 1s 22ms/step - loss: 606.0307 - mse: 606.0307 - mae: 23.3486 - val_loss: 552.5729 - val_mse: 552.5729 - val_mae: 22.0775
Epoch 2/100000
8/8 [==============================] - 0s 5ms/step - loss: 584.5447 - mse: 584.5447 - mae: 22.8715 - val_loss: 530.0435 - val_mse: 530.0435 - val_mae: 21.5434
Epoch 3/100000
8/8 [==============================] - 0s 5ms/step - loss: 559.5955 - mse: 559.5955 - mae: 22.2936 - val_loss: 501.8297 - val_mse: 501.8297 - val_mae: 20.8535
Epoch 4/100000
8/8 [==============================] - 0s 4ms/step - loss: 527.0525 - mse: 527.0525 - mae: 21.5166 - val_loss: 463.6925 - val_mse: 463.6925 - val_mae: 19.8730

''''

Epoch 114/100000
8/8 [==============================] - 0s 5ms/step - loss: 7.5097 - mse: 7.5097 - mae: 1.9705 - val_loss: 4.8591 - val_mse: 4.8591 - val_mae: 1.6749
Epoch 115/100000
8/8 [==============================] - 0s 4ms/step - loss: 7.4967 - mse: 7.4967 - mae: 1.9741 - val_loss: 4.8500 - val_mse: 4.8500 - val_mae: 1.6697
Epoch 116/100000
8/8 [==============================] - 0s 5ms/step - loss: 7.4570 - mse: 7.4570 - mae: 1.9641 - val_loss: 4.8535 - val_mse: 4.8535 - val_mae: 1.6625
Epoch 117/100000
8/8 [==============================] - 0s 4ms/step - loss: 7.4631 - mse: 7.4631 - mae: 1.9671 - val_loss: 4.9119 - val_mse: 4.9119 - val_mae: 1.6843

# 모델링한 인공지능을 학습시킬때 콜백이란 파라미터에 아까만든 변수 얼리스탑을 넣어주면 된다

콜백을 하기위해서는 반드시 벨리데이션 스플릿을 지정해줘야 한다

이렇게하면 해당 코드에서 에포크를 10만번을 지정해놓았음에도 117번째에서 멈춘다

107부터 117번의 10번의 에포크동안 성능 향상이 미미했으므로 멈춘것이다

 

 

 

plot_history(epoch_history)

# 해당 결과를 그래프로 보면 100번 이후로는 뚜렷한 변화가 없는것이 보인다