:: ai/tensorflow

tensorflow :: 텐서플로우 losses 의 regularization loss (v1 -> v2 코드 업그레이드 5)

토람이 2022. 4. 12. 23:31

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