이 부분은 지금 파이썬 기초 문법만 숙지하고 있는 상황이라
사용할 일이 별로 없겠지만 나중에 사용할 경우가 있을 수 있으니 작성한다.
● 데코레이션
- 데코레이터는 파이썬에서 함수나 메서드의 기능을 확장, 수정하는 강력한 도구.
- 데코레이터는 함수나 메서드를 인자로 받아 해당 함수나 메서드를 변경하거나 래핑하는 함수
- 기존의 함수를 따로 수정하지 않고도 추가 기능을 넣고 싶을 때 사용
데코레이터 구조 )
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부터는 즉시 실행모드가 기본적으로 활성화 되어 있다고 한다.
○ 그래프 모드
- 파이썬 코드를 그래프로 변환하고 이를 최적화한 후에 실행하는 방식
- 먼저 그래프를 정의하고, 그래프를 실행하기 위해 세션을 통해 입력을 제공해야 한다.
- 연산의 순서와 의존성을 명확하게 표현, 병렬 실행과 하드웨어 가속화에 최적화
○ 차이점
- 즉시 실행 모드는 각각의 연산을 바로 평가하기 때문에 코드를 작성하고 실행하는 데에
편리, 반면에 , 그래프 모드는 전체 그래프를 먼저 정의하고 실행해야 하므로
초기 설정이 더 복잡할 수 있다.
- 그래프 모드는 동일한 그래프를 여러번 실행할 때 재사용할 수 있어서
효율적인 반복 작업에 유용.
'데이터분석 study > Python' 카테고리의 다른 글
TIL_24.07.26_itertools/combinations (0) | 2024.07.26 |
---|---|
TIL_24.07.25_category type (0) | 2024.07.25 |
TIL_24.07.12_알면 유용한 파이썬 문법들(불리언 인덱싱) (0) | 2024.07.12 |
TIL_24.07.11_알면 유용한 파이썬 문법3(class) (0) | 2024.07.11 |
TIL_24.07.10_ 알면 유용한 파이썬 문법들2(glob,os,split) (0) | 2024.07.10 |