더북(TheBook)

3.5.3 GradientTape API 다시 살펴보기

지금까지는 텐서플로가 넘파이와 매우 비슷하게 보일 것입니다. 하지만 넘파이가 할 수 없는 것이 있습니다. 미분 가능한 표현이라면 어떤 입력에 대해서도 그레이디언트를 계산할 수 있습니다. GradientTape 블록을 시작하고 하나 또는 여러 입력 텐서에 대해 계산을 수행한 후 입력에 대해 결과의 그레이디언트를 구하면 됩니다.

코드 3-10 GradientTape 사용하기

input_var = tf.Variable(initial_value=3.) 
with tf.GradientTape() as tape:
    result = tf.square(input_var)
gradient = tape.gradient(result, input_var)

gradient = tape.gradient(loss, weights)와 같이 가중치에 대한 모델 손실의 그레이디언트를 계산하는 데 가장 널리 사용되는 방법입니다. 실제로 2장에서 이를 보았습니다.

지금까지 tape.gradient()의 입력 텐서가 텐서플로 변수인 경우만 보았습니다. 실제로 입력은 어떤 텐서라도 가능합니다. 하지만 텐서플로는 기본적으로 훈련 가능한 변수만 추적합니다. 상수 텐서의 경우 tape.watch()를 호출하여 추적한다는 것을 수동으로 알려 주어야 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.