본문 바로가기
Deep Learning/Hands On Machine Learning

12.4 텐서플로 함수와 그래프

by 대소기 2021. 11. 11.

텐서플로 함수 만들기

  • 텐서플로 함수는 사용하지 않는 노드를 제거하고 표현을 단순화하는 등의 방식으로 계산 그래프를 최적화하고, 연산을 효율적으로 실행하기 때문에 원본 파이썬 함수보다 빠르게 실행하는 것이 가능하다.
  • 사용자 정의 함수를 케라스에 적용할 때는 tf.function()을 통해 텐서플로 함수로 변환하지 않아도 자동으로 변환된다.
  • 케라스가 파이썬 함수를 텐서플로 함수로 바꾸지 않게 하려면 사용자 정의 층이나 모델을 만들 대 dynamic=True 혹은 compile()메소드 호출 시 run_eagerly=True로 지정하면 된다.
def cube(x):
    return x**3

tf_cube=tf.function(cube)
tf_cube(tf.constant(2.0))

#<tf.Tensor: shape=(), dtype=float32, numpy=8.0>
  • 텐서플로 함수는 위와 같이 tf.function()을 통해 만들 수 있다.
  • 텐서플로 함수를 통해 반환된 결과는 tensor 객체이다.
  • tf.function()을 통해 만들어진 텐서플로 함수는 계산그래프를 생성해 계산을 실행하게 된다.

@tf.function
def tf_cube(x):
    return x**3
  • 위와 같이 tf.function 데코레이터를 통해서 사용하는 방법도 존재한다. 실제로 이 방법이 더 많이 쓰인다.

tf.cube.python_function(2)
#8
  • tf.function은 원할 때 python_function 속성으로 참조할 수 있다.

12.4.1 오토그래프와 트레이싱

텐서플로가 그래프를 생성하는 방식

1) Autograph단계

  • python code를 분석하여 for문, while문, if문 break, continue, return과 같은 제어문을 모두 찾는다.
  • 제어문들을 텐서플로 연산으로 바꾼 업그레이드 버전을 만든다(반복문은 tf.while_loop() 등과 같이).