‘블록과 함께 하는 파이썬 딥러닝 케라스’ 세미나 3

이번 세미나에서는 ‘2부 딥러닝 개념잡기’의 4장에서 6장까지 다룹니다.

 

4장을 읽고 케라스에서 학습을 조기 종료 시키는 방법을 익힙니다.

학습 조기종료 시키기

p61. 학습을 조기종료 시키기 위해 콜백함수로 EarlyStopping(keras.callbacks) 함수를 사용한다. fit 함수의 callbacks로 넘겨준다.

매개변수는 다음과 같다.

  • monitor: 관찰하고자 하는 항목. val_loss나 val_acc가 주로 사용된다.
  • min_delta: 개선되고 있다고 판단하기 위한 최소 변화량을 나타낸다. 만약 변화량이 min_delta 보다 적은 경우에는 개선이 없다고 판단된다.
  • patience: 개선이 없다고 바로 종료하지 않고 개선이 없는 에포크를 얼마나 기다려 줄 것인가를 설정한다. 만약 10이라고 지정하면 개선이 없는 에포크가 10번째 지속될 경우 학습을 종료한다.
  • verbose: 얼마나 자세하게 정보를 표시할 것인가를 지정한다. (0, 1, 2)
  • mode: 관찰 항목에 대해 개선이 없다고 판단하기 위한 기준을 지정한다. 예를 들어 관찰 항목이 val_loss인 경우에는 감소되는 것이 멈출 때 종료되어야 하므로 ‘min’으로 설정한다.
    • auto: 관찰하는 이름에 따라 자동으로 지정한다.
    • min: 관찰하고 있는 항목이 감소되는 것을 멈출 때 종료한다.
    • max: 관찰하고 있는 항목이 증가되는 것을 멈출 때 종료한다.

p68. 케라스에서 제공하는 ModelCheckpoint라는 콜백함수를 이용하면 매 에포크마다 학습된 가중치를 파일로 저장할 수 있다. 과적합이 일어난 시점에서의 에포크를 확인한 후 해당하는 가중치를 실제 모델에 적용하면 된다. 보통은 학습을 마쳐야 모델을 테스트할 수 있지만 이 콜백함수를 사용하면 에포크마다 가중치가 생성되기 때문에 이 가중치를 불러와서 모델의 정확도를 중간 점검할 수 있다. 학습 시간이 길 경우 요긴하게 사용할 수 있다.

5장을 읽고 모델 평가에 대한 다양한 지표들을 학습합니다. 이 책은 다른 책들에 비해서 평가 지표를 상세하게 다루고 있습니다. 이번 기회에 평가 지표들을 잘 정리해 두는 것도 좋을 것 같습니다.

1. 분류하기

p70~72. 무조건 한 쪽으로 분류하더라도 클래스의 분포에 따라 높게 나올 수 있다. 정확도를 평가할 때는 클래스의 분포도 꼭 확인해야 한다.

양성을 잘 골라낼 수 있는 능력을 평가하려면 민감도를 사용해야 한다.

민감도 = 판정한 것 중 실제 양성 수 / 전체 양성 수

특이도는 얼마나 특이한 것만 양성으로 골라내느냐?이다. 이 말은 특이한 것만 양성으로 골라내니 반대로 음성을 음성이라고 잘 판정한다고 볼 수 있다.

특이도 = 판정한 것 중 실제 음성 수 / 전체 음성 수

p73. 임계값을 조정하면 정확도, 민감도, 특이도가 바뀐다.

p74. ROC(Receiver Operating Characteristic) curve – 민감도와 특이도가 어떤 관계를 갖고 변하는지 그래프로 표시한 것

ROC curve 아래 면적을 구한 값을 AUC(Area Under Curve)라고 한다. AUG 0.5 값이 기준, 개발한 모델을 사용하려면 이것보다는 커야 한다.

sklearn 패키지는 RCO curve와 AUG를 좀 더 쉽게 구할 수 있는 함수를 제공한다.

p75. 소스코드를 처음 보았을 때 ‘class_F, proba_F, class_G, proba_G를 어떻게 구하지?’라는 의문이 들었다. ‘클래스 값과 모델에서 나오는 클래스 확률값을 그대로 입력’하면 된다는데. p73의 F와 G 그림에서 클래스 값은 짝수인 경우는 0, 홀수인 경우는 1이다. F의 첫 번째에서 네 번째까지는 짝수이니 0, 0, 0, 0이고, 다섯 번째와 여섯 번째는 홀수이니 1, 1이다. 그 뒤에 있는 것들도 같은 방법으로 하면 된다. 확률 값은 중간 값이다. F의 첫 번째 짝수의 확률은 0.0과 0.1의 중간 값 0.15가 된다. 두 번째와 세 번째는 0.1과 0.2 에 있으니 확률값은 0.15가 된다.

 

2. 검출 및 검색하기

p77~79. 정밀도는 모델이 얼마나 정밀한가?이다. 즉, 진짜 양성만을 잘 고를수록 높아진다.

정밀도 = 실제 양성 수 / 양성이라고 판정한 수

재현률은 양성인 것을 놓치지 않고 골라내는가?이다. 양성을 많이 고를수록 재현율이 높다.

재현률 = 검출 양성 수 / 전체 양성 수

검출 문제에서는 검출되지 않은 진짜 음성에 대해서는 관심이 없다.

p80. Precision-Recall 그래프, AP(Average Precision). sklearn 패키지, AP 수치가 높으면 좋은 모델

 

3. 분할하기

Pixel Accuracy, Mean Accuracy, Mean IU, Frequency Weighted IU

 

6장을 읽고 학습 모델을 저장하고 불러오기할 수 있도록 합니다.

p88. 딥러닝 시스템은 크게 학습 부분과 판정 부분으로 나누어진다.

p89. 학습된 모델을 저장한다는 말은 ‘모델 아키텍처’와 ‘모델 가중치’를 저장한다는 말이다. 모델 아키텍처는 모델이 어떤 층으로 어떻게 쌓여 있는지에 대한 모델 구성의 정의이다.

케라스에서는 save 함수 하나로 모델 아키텍처와 모델 가중치를 h5 파일 형식으로 모두 저장할 수 있다.

p91. 모델을 로드할 때는 load_model 함수를 사용합니다.

실제 데이터를 가지고 결과를 얻을 때는 predict 함수를 사용합니다. Sequential 기반의 분류모델인 경우 predict_classes 함수를 사용할 수 있습니다. 이 함수를 사용하면 가장 확률이 높은 클래스의 인덱스를 알려줍니다.

model_to_dot 함수를 통해 모델 아키텍처를 가시화할 수 있다.

소스코드 중에 눈에 거슬리는 부분이 있습니다.

p86의 Activation을 import하는 부분입니다. 왜 사용하지도 않는 것을 임포트했을까요?

p90의 load_model도 사용하지 않는데.

 

p91에 오타가 있네요. model_to_dat -> model_to_dot

About the Author
(주)뉴테크프라임 대표 김현남입니다. 저에 대해 좀 더 알기를 원하시는 분은 아래 링크를 참조하세요. http://www.umlcert.com/kimhn/

Leave a Reply

*