데이터분석 study/Python

TIL_24.07.15_데코레이션 사용하기

justdata 2024. 7. 15. 17:53

이 부분은 지금 파이썬 기초 문법만 숙지하고 있는 상황이라

사용할 일이 별로 없겠지만 나중에 사용할 경우가 있을 수 있으니 작성한다.

 

데코레이션

    - 데코레이터는 파이썬에서 함수나 메서드의 기능을 확장, 수정하는 강력한 도구.

    - 데코레이터는 함수나 메서드를 인자로 받아 해당 함수나 메서드를 변경하거나 래핑하는 함수

    - 기존의 함수를 따로 수정하지 않고도 추가 기능을 넣고 싶을 때 사용 

 

데코레이터 구조 )

def decorator_function(original_function):
    def wrapper_function(**kwargs):
        # 함수 호출 전에 실행되는 코드
        result = original_function(**kwargs)
        # 함수 호출 후에 실행되는 코드
        return result
    return wrapper_function

 

● 데코레이터 예시

import tensorflow as tf

@tf.function  # The decorator converts `add` into a `Function`.
def add(a, b):
  return a + b

add(tf.ones([2, 2]), tf.ones([2, 2]))  #  [[2., 2.], [2., 2.]]


import timeit
conv_layer = tf.keras.layers.Conv2D(100, 3)

@tf.function
def conv_fn(image):
  return conv_layer(image)

image = tf.zeros([1, 200, 200, 100])

print("Eager conv:", timeit.timeit(lambda: conv_layer(image), number=10))
print("Function conv:", timeit.timeit(lambda: conv_fn(image), number=10))
print("Note how there's not much difference in performance for convolutions")

   * 딥러닝 라이브러리로 유명한 텐서 플로우의 @tf.function이라는 데코레이션 기능

   * 이 데코레이션은 딥러닝 연산을 수행하거나 데이터 연산을 수행할 때 텐서 플로우 연산을

      사용하는 경우 훨씬 빠른 성능을 제공

   * 이유는 텐서플로우는 독특한 연산 방식(그래프)을 가지고 있기 때문에 특정 상황에서는 데코레이션

       으로 이 연산을 활용하여 이 연산 방식을 사용할 수 있다.

   * 훨씬 빠르게 연산이 되는데 계산량이 적은 작은 연산이 많이 있는 상황에서는 유리하지만

      계산량이 큰 연산이 있는 경우에는 속도 향상이 크게 차이나지 않는다고 한다.

   * 파이썬에서 그래프 연산을 한다는 것은 연산의 순서를 명확하게 정리함으로써

       최적화 하는 과정이라고 한다.

 

◎ 파이썬의 즉시 실행 모드와 그래프 모드

    ○ 즉시 실행 모드 (Eager Execution)

         - 즉시 실행 모드는 파이썬 코드를 순차적으로 실행하면서 연산을 즉시 평가

         - 각각의 연산은 실행될 때마다 결과가 즉시 반환되어 사용자가 바로 확인

         - TensorFlow2.0부터는 즉시 실행모드가 기본적으로 활성화 되어 있다고 한다.

    

    ○ 그래프 모드

         - 파이썬 코드를 그래프로 변환하고 이를 최적화한 후에 실행하는 방식

         - 먼저 그래프를 정의하고, 그래프를 실행하기 위해 세션을 통해 입력을 제공해야 한다.

         - 연산의 순서와 의존성을 명확하게 표현, 병렬 실행과 하드웨어 가속화에 최적화

 

     ○ 차이점

           - 즉시 실행 모드는 각각의 연산을 바로 평가하기 때문에 코드를 작성하고 실행하는 데에

             편리, 반면에 , 그래프 모드는 전체 그래프를 먼저 정의하고 실행해야 하므로 

              초기 설정이 더 복잡할 수 있다.

           - 그래프 모드는 동일한 그래프를 여러번 실행할 때 재사용할 수 있어서 

              효율적인 반복 작업에 유용.