losses
머신러닝 모델링에서 손실함수의 정의와 loss 값 연산은 필수적이다.
기존 tensorflow v1.x 으로 모델을 구축해보았던 개발자라면
keras.losses 모듈 내 함수들을 사용해봤을 것이다.
그 중 아래의 'get_regularization_loss' 는 총 regularization loss 값을 계산하는 기능을 한다.
그러나 v2.x 버전으로 업그레이드 한 후에 해당 코드는 다음과 같이 에러가 발생한다.
tf.losses.get_regularization_loss()
# AttributeError: module 'tensorflow.keras.losses' has no attribute 'get_regularization_loss'
이는 텐서플로우 v2.0 에서 더 이상 기존 방식으로 손실함수 연산을 제공하지 않기 때문이다.
1. tf.math, model.losses 사용
기존의 방식은 사라졌지만, 다른 방식으로 total loss 값을 계산할 수 있다.
regularization_loss = tf.math.add_n(model.losses)
# model = tf.keras.Model(x, y)
model 을 정의하면(주석 참고) model 자체적으로 losses 를 받아올 수 있다.
이 loss 값들의 합을 계산하면 되므로, tf.math 의 add_n (덧셈 함수) 에 인자로 넣어주면 된다.
기존처럼 총 loss 값을 편하게 제공해주는 기능은 사라졌지만
그래도 이런 식으로 어렵지 않게 직접 더하여 계산해낼 수 있다.
2. compat 사용 (v1 코드 그대로 사용)
이전 포스팅에도 언급했지만 compat 모듈을 사용하여 v2.0 기능을 끄도록 설정하고
기존의 v1.0 코드를 그대로 사용하는 방법도 존재한다.
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
tf.losses.get_regularization_loss()
코드 상단에 이렇게 disable_v2_behavior 를 정의해두고 기존 코드를 그대로 사용하면 된다.
300x250
':: ai > tensorflow' 카테고리의 다른 글
tensorflow :: 텐서플로우 Saver (v1 -> v2 코드 업그레이드 7) (0) | 2022.06.07 |
---|---|
tensorflow :: 텐서플로우 Optimizer 개념 및 코드 업그레이드 (v1 -> v2 코드 업그레이드 6) (0) | 2022.04.17 |
tensorflow :: 텐서플로우 layers (v1 -> v2 코드 업그레이드 4) (0) | 2022.03.31 |
tensorflow :: 텐서플로우 contrib (v1 -> v2 코드 업그레이드 3) (0) | 2022.03.30 |
tensorflow :: 텐서플로우 session, placeholder (v1 -> v2 코드 업그레이드 2) (0) | 2022.03.07 |