
491
12
장
텐서플로를 사용한 사용자 정의 모델과 훈련
니다 (그래서
NaN
이 반환됩니다 ). 다행히 수치적으로 안전한 소프트플러스
softplus
의 도함수
1
/ (
1
+
1
/
exp
(
x
))
를 해석적으로 구할 수 있습니다. 그다음
@
tf
.
custom
_
gradient
데코
레이터
decorator
를 사용하고 일반 출력과 도함수를 계산하는 함수를 반환하여 텐서플로가
my
_
softplus
()
함수의 그레이디언트를 계산할 때 안전한 함수를 사용하도록 만들 수 있습니다
(소프트플러스 함수까지 역전파된 그레이디언트를 입력으로 받습니다. 연쇄 법칙에 따라 전달
된 그레이디언트와
my
_
softplus
()
함수의 그레이디언트를 곱해야 합니다 ).
@tf.custom_gradient
def my_better_softplus(z):
exp = tf.exp(z)
def my_softplus_gradients(grad):
return grad / (1 + 1 / exp)
return tf.math.log(exp + 1), my_softplus_gradients
이제 큰 입력 값에서도
my
_
better
_
softplus
()
함수의 그레이디언트를 올바르게 계산할 수
있습니다 (하지만 여전히 지수 함수이기 때문에 폭주합니다.
22
한 가지 방법은
tf
.
where
()
를
사용해 값이