tensorflow는 모델을 compile 할 때 다양한 metrics를 제공해준다.
다음과 같이 설정하면 매 epoch 마다 해당하는 수치들을 계산하여 출력해준다.
하지만 f1 score는 tf.metrics에서 찾아볼 수 없는데
Tensorflow addons를 설치하면 된다.
tensorflow-addons documents : https://www.tensorflow.org/addons/api_docs/python/tfa
tensorflow-addons github : https://github.com/tensorflow/addons/tree/v0.17.0
깃허브에서 tensorflow 버전과 파이썬 버전에 따른 addons 버전을 확인하고 설치해야 한다.
설치 예시 : pip install tensorflow-addons==0.15.0
설치가 완료되었다면 실제 모델에 적용해 보자.
tensorflow_addons.metrics를 import 해주고 metrics에 F1Score를 출력하도록 지정해준다.
F1score의 파라미터를 살펴보면
num_classes : 다중분류일 경우 class의 갯수에 해당하는 (필자는 50) 숫자를 지정해준다.
average :
- None : 각각의 class에 대한 점수를 리턴한다.
- micro : micro-f1 score를 리턴한다.
- macro : macro-f1 score를 리턴한다.
결과
train 시의 f1_score와 validation에 대한 f1_score 모두 잘 표시된다.
tensorflow Early stopping에 적용하기
케라스의 EarlyStopping을 import 해준 후 콜백함수로 지정해준다.
monitor : 'f1_score' 로 지정할 경우 train의 f1_score, 위와 같이 vadliation 데이터에 대한 f1_score를 지정할 수도 있다.
patience : 해당 수치가 예상보다 낮아지거나 올라가도 epoch을 더 시도해보는 횟수
mode :
- 'max' : accuracy와 같이 올라가야 좋은 경우 설정, 지정된 patience 만큼 올라가지 않을 경우 stop
-'min' : val_loss 와 같이 내려갈수록 좋은 경우 설정, 지정된 patience 만큼 떨어지지 않을 경우 stop
f1score를 이용하여 EarlyStopping을 적용할 경우 다음과 같은 오류가 뜰 수가 있는데
Python Error: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
이는 모델을 컴파일 시 average=None으로 지정하여 모든 클래스에 대한 score가 반환이 되어서 그렇다.
'인공지능' 카테고리의 다른 글
AI-hub 공공데이터를 활용하여 한국어-영어 번역 LLM 만들기 (3) GPT 학습시키기 (0) | 2024.08.19 |
---|---|
AI-hub 공공데이터를 활용하여 한국어-영어 번역 LLM 만들기 (2) 모델 불러오기 (0) | 2024.07.11 |
AI-hub 공공데이터를 활용하여 한국어-영어 번역 LLM 만들기 (1) 데이터 가공 (0) | 2024.07.09 |
Segment Anything Model(SAM) 사용하기 (0) | 2024.07.01 |
EfficientNet B0 ~ B7 input / output shape(size), params (0) | 2022.10.12 |