텐서플로 함수 만들기
- 텐서플로 함수는 사용하지 않는 노드를 제거하고 표현을 단순화하는 등의 방식으로 계산 그래프를 최적화하고, 연산을 효율적으로 실행하기 때문에 원본 파이썬 함수보다 빠르게 실행하는 것이 가능하다.
- 사용자 정의 함수를 케라스에 적용할 때는 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() 등과 같이).
'Deep Learning > Hands On Machine Learning' 카테고리의 다른 글
13.2 TFRecord 포맷 (0) | 2021.11.12 |
---|---|
13.1 데이터 API (0) | 2021.11.12 |
12.3 사용자 정의 모델과 훈련 알고리즘 (0) | 2021.11.11 |
12.2 넘파이처럼 텐서플로 사용하기 (0) | 2021.09.29 |
12.1 텐서플로 훑어보기 (0) | 2021.09.29 |