• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

@tf.function은 무슨 역할을 하는 코드인가요?

21.03.17 20:20 작성 조회수 4.92k

0

해당 줄이 없어도 def 자체로도 함수가 선언되는 데에는 충분하지 않나요? 각주로서의 의미인가요?

답변 1

답변을 작성해보세요.

5

안녕하세요~. 반갑습니다. 
@tf.fuctnion     annotation을 이해하기 위해서는 tensorflow 개발과정의 역사(?)를 조금 이해하셔야하는데요.
tf 1.x 버전대에서는 그래프의 생성과 실행을 분리하고 값을 실행할때는 Session이라는 것을 열어서 값을 실행하는 형태였는데요. 이렇게 진행하다보니 값을 계산하고 싶을때마다 Session을 이용해서 실행을 해주어야만해서 프로그래밍 과정상에 불편함이 많았습니다.
따라서 tf 2.x 버전대에서는 Session을 삭제하고 바로 값을 실행할 수 있는 Eager Execution이라는 것이 적용되었는데요. 따라서 값을 계산할때 별도의 Session을 열지 않고도 편리하게 진행할 수 있게 되었습니다.
그럼 왜 굳이 tf 1.x대에서는 저렇게 복잡하게 그래프의 생성과 실행을 분리했느냐라고 생각해 볼 수 있는데요. 해당 형태가 성능상(=속도)의 이점이 있기 때문입니다.

여기서 @tf.function 관련된 내용이 나오게 되는데요. def 위에 @tf.fucnction annotation을 붙이면 마치 tf2.x 버전에서도 tf1.x 형태처럼 그래프 생성과 실행이 분리된 형태로 해당 함수내의 로직이 실행되게 됩니다. 따라서 상황에 따라서 성능이 약간 향상 될 수 있는데요.(=실행 속도가 약간 빨라질 수 있습니다.) 다만 해당 annoation을 붙이면 tf1.x처럼 해당 함수내의 값을 바로 계산해볼수 없어서 디버깅이 불편해질수 있습니다. 따라서 모든 로직에 대한 프로그래밍이 끝난 상태에서 @tf.fuction을 붙이는 것이 좋습니다.

즉 정리하면
1. @tf.fucntion annotation을 붙이면 tf1.x 스타일로 해당 함수내의 로직이 동작한다.
2. 따라서 상황에 따라 속도가 약간 빨라질 수 있다.
3. 다만 해당 annotation을 붙이면 값을 바로 계산해볼수 없어서 모든 로직에 대한 프로그래밍이 끝난 뒤에 붙이는 것이 좋다.

이렇게 생각하시면 될 것 같습니다.
더 자세한 내용은 아래 링크를 참조하세요.
https://www.tensorflow.org/guide/function?hl=ko 

감사합니다~.