본문 바로가기

인공지능

Tensorflow addons 을 이용한 F1 score 출력

tensorflow는 모델을 compile 할 때 다양한 metrics를 제공해준다.

 

다음과 같이 설정하면 매 epoch 마다 해당하는 수치들을 계산하여 출력해준다.

하지만 f1 score는 tf.metrics에서 찾아볼 수 없는데

Tensorflow addons를 설치하면 된다.

 

tensorflow-addons documents : https://www.tensorflow.org/addons/api_docs/python/tfa 

 

Module: tfa  |  TensorFlow Addons

Useful extra functionality for TensorFlow maintained by SIG-addons.

www.tensorflow.org

 

tensorflow-addons github : https://github.com/tensorflow/addons/tree/v0.17.0

 

GitHub - tensorflow/addons: Useful extra functionality for TensorFlow 2.x maintained by SIG-addons

Useful extra functionality for TensorFlow 2.x maintained by SIG-addons - GitHub - tensorflow/addons: Useful extra functionality for TensorFlow 2.x maintained by SIG-addons

github.com

 

깃허브에서 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가 반환이 되어서 그렇다.