Deep learning

Keras Tuner Custom objective 설정 방법

비비이잉 2021. 8. 25. 15:40
반응형

나같은 실수를 하는 사람이 또 있을까봐 남겨둔다... 

 

 

튜너를 분명 사용했는데 f1 score이 무슨일이지.?

 

당황스럽고 황당하다,, 테스트를 해봐도 결과가 좋을리가 없지 역시 

 

 

f1 accuracy direction이 min이 되어있고 val_f1_score direction이 min이 되어있다 이게 무슨일이야...

나는 설정한 적이 없는데 새로 정의되어서 들어가는 값은 디폴트로 min값이 들어가는 것 같다 

keras tuner를 돌린 의미가 없어진건가... ㅠㅠㅠㅠ

또 에러 해결해보자 ~~!

 

Custom 하게 metrics를 Compile해서 tuner hyperband 돌릴 때는 string일 경우 direction 설정을 해줘야한다고 했는데 

해봤는데 

이게 무슨 일이지 

 

내가 설정해준 val_f1_score값은 max로 되어있고 나머지 f1 score는 min으로 되어있다. 동시에 두개를 제어하는 방법을 알아야하는데..

 

다시 방법을 찾아보자 ! 

 

 

https://www.kaggle.com/imeintanis/tps-jan21-nn-starter-keras-tuner-ensemble

 

TPS Jan21: NN Starter + Keras Tuner Ensemble

Explore and run machine learning code with Kaggle Notebooks | Using data from Tabular Playground Series - Jan 2021

www.kaggle.com

구글링을 열심히 하던 와중 이 문제를 해결할 수 있는 key를 찾은 것 같다. 

 

코드를 자세히 보고 있는데 

 

f1 = tfa.metrics.F1Score(num_classes = len(CLASSES), average='macro')
model.compile(optimizer = keras.optimizers.Adam(hp.Float('learning_rate', 1e-4, 1e-2, sampling = 'log')), loss = tf.keras.losses.BinaryCrossentropy(), 
metrics=[tf.keras.metrics.BinaryAccuracy(name='accuracy'), f1])

여기를 자세히 보면 metrics 뒤에 필자의 경우는 tf.keras.metrics.BinaryAccuracy(name = 'accuracy'), f1 이렇게 두개의 값이 들어가있다. 

 

기존에 하던 방식은 f1을 저 방법을 통해서 선언해두고 나서, 그냥 compile 할때 f1에 넣어줬다. 

여기서 찾아낸 것은 BinaryAccuracy(name = 'accuracy')로 설정을 해주었기 때문에 

 

tuner = kt.Hyperband(model_builder,
                     objective = 'val_accuracy', 
                     max_epochs = 30,
                     directory = '/home/eunbi/',
                     project_name = 'Onto_kerastuner')

다음과 같이 kt.Objective('val_accuracy', "max")와 같이 사용하지 않아도 그냥 val_을 붙이거나 train accuracy 가 기준이면 그냥 'accuracy'라고 해도 값이 사용이 된다는 것이다! 

 

그래서 바꾼 방법은 

 

 

#얘 이름을 이렇게 지정해줘야 나중에 밑에서 accuracy로 하던 f1 score로 하던 방법이 생긴다. 
f1 = tfa.metrics.F1Score(num_classes = len(CLASSES), average='macro', name = 'f1_score')

이렇게 이름만 선언해주기.. 

 

해결 !

반응형

'Deep learning' 카테고리의 다른 글

Tensorflow Batchnormalization (전이학습) 중요한 사항  (0) 2021.09.13
EfficientNetV2  (0) 2021.08.30
Keras Tuner 사용방법(튜토리얼)  (0) 2021.08.24
Keras Tuner 케라스 튜너 설치  (0) 2021.08.23
Optimizer  (0) 2021.08.18