https://www.tensorflow.org/guide/function?hl=ko#%EC%B6%94%EC%A0%81
https://notebook.community/tensorflow/docs-l10n/site/ko/guide/function
추적 (Tracing)
- Function은 TensorFlow Graph에서 프로그램을 실행합니다.
- 그러나 tf.Graph는 사용자가 즉시 실행 TensorFlow 프로그램에서 작성하고자 하는 모든 요소를 나타낼 수는 없습니다.
- 예를 들어 Python은 다형성을 지원하지만 tf.Graph는 입력에 데이터 유형과 차원의 지정을 요구합니다.
- tf.Graph는 정적인 dtype과 shape 차원이 필요합니다.
- tf.function은 올바른 그래프를 생성하기 위해 필요하면 함수를 재트레이싱(retracing)하여 이 문제를 해결하지만, 문제점이 발생할 수 있다.
- 또는 사용자가 명령줄 인수 읽기, 오류 발생 또는 더 복잡한 Python 객체 작업과 같은 부수적인 작업을 수행할 수도 있지만,
이 중 어떤 작업도 tf.Graph에서 실행할 수 없습니다.
Function은 코드를 두 단계로 분리하여 이러한 문제를 해결
- "추적"이라고 하는 첫 번째 단계에서 Function은 새 tf.Graph를 만듭니다.
- Python 코드는 정상적으로 실행되지만 모든 TensorFlow 연산(예: 두 개의 텐서 추가)이 지연되어,
- 결국 실행되지 않고 tf.Graph에 의해 캡처됩니다.
- 두 번째 단계에서는 첫 번째 단계에서 지연된 모든 부분을 포함하는 tf.Graph가 실행됩니다.
- 이 단계는 추적 단계보다 훨씬 빠릅니다.
언제 다시 트레이싱되나요?
- 트레이싱으로 생성된 콘크리트 함수를 캐싱한다.
- 파이썬 타입에서 키는 id()를 기반으로 합니다, 따라서 클래스 메서드는 인스턴스마다 독립적으로 트레이싱됩니다.
트레이싱 피하기
EX 1 - 매개변수를 Tensor로 변환
- 하이퍼파라미터 조작하고 그래프를 구성하기 위해 파이썬 매개변수가 자주 사용됩니다.
- 파이썬 매개변수가 바뀌면 그래프가 다시 트레이싱됩니다.
- 파이썬 매개변수가 그래프 구성에 사용되지 않을 수 있습니다
- 이런 경우 파이썬 값이 변하면 불필요한 재트레이싱을 일으킵니다.
- 다중 트레이싱이 되었지만 생성된 그래프는 실제로 동일하기 때문에 조금 비효율적입니다.
def train_one_step():
pass
@tf.function
def train(num_steps):
print("트레이싱 num_steps = {}".format(num_steps))
for _ in tf.range(num_steps):
train_one_step()
train(num_steps=10)
train(num_steps=20)
- 해결하는 간단한 방법은 생성된 그래프에 영향을 미치지 않도록 매개변수를 Tensor로 바꾸는 것. *
train(num_steps=tf.constant(10))
train(num_steps=tf.constant(20))
EX 2 - input_signature 사용
- 새로운 tf.function 생성
- 객체마다 트레이싱이 발생
def f():
print('트레이싱!')
tf.print('실행')
tf.function(f)() # tracing 발생
tf.function(f)() # tracing 발생
get_concrete_function
메서드를 사용해 트레이싱된 특정 함수를 얻을 수 있습니다.- tf.function에 input_signature를 지정하여 트레이싱을 제한
@tf.function(input_signature=(
tf.TensorSpec(shape=[None, None, None, 3], dtype=tf.float32), # image_array 입력
tf.TensorSpec(shape=[None], dtype=tf.int64) # step_oh 입력
))
def predict_multi_step(model, image_array, step_oh):
predictions, _ = model([step_oh, image_array], training=False)
return predictions
오토그래프 변환
- 오토그래프(AutoGraph)는 tf.function안에 기본으로 활성화되어 있습니다.
- 파이썬의 실행 코드를 그래프 호환 텐서플로 연산으로 변환합니다.
'프로그래밍' 카테고리의 다른 글
[Git] 용량이 큰 파일 Push하기 - LFS (0) | 2024.09.05 |
---|---|
[VisualStudioCode] SSH 원격접속 오류 (1) | 2024.04.26 |
[레거시 코드 활용 전략] ch13. 변경해야 하는데, 어떤 테스트를 작성해야 할지 모르겠다 (0) | 2024.01.09 |
[VisualStudio] 고정 탭 옵션 (2) | 2024.01.04 |
[디자인패턴] 전략패턴 (Strategy Pattern) (0) | 2024.01.03 |