TensorFlow는 그래프 기반의 계산 모델을 사용하며, 사용자가 정의한 연산을 그래프로 표현하여 처리합니다.
TensorFlow에서는 그래프가 연산의 구조를 정의하고, 세션에서 그래프가 실행될 때 데이터가 해당 구조에 맞게 흐르게 됩
니다.
즉시 실행 모드(Eager Execution Mode) - tensorflow 2.x 부터는 eager execution mode가 기본값이다.
-> 명시적으로 그래프를 선언하지 않은 모드이며, 코드를 순차적으로 바로바로 실행하는 모드(그냥, 인터프리터 방식)
그러나 Tensorflow는 그래프를 기본 계산 모델로 한다고 하였다.
코드를 순차적으로 만나면서, 그 즉시 그래프를 정의하여 연산 구조를 정의하고, 그 이후에 즉시 연산도 같이 실행을 한
다.
import tensorflow as tf
# 즉시 실행 모드에서의 계산
a = tf.constant(2)
b = tf.constant(3)
c = tf.add(a, b)
print(c.numpy()) # 5
그래프 실행 모드(Graph Execution ModE) - tensorflow은 그래프를 기본 계산 모델로 한다.
-> 먼저 예시 코드를 보자
import tensorflow as tf
# 그래프 모드에서의 계산
tf.compat.v1.disable_eager_execution() # 즉시 실행 비활성화(tensorflow 2.x 부터는 즉시 실행이 기본)
a = tf.constant(2) # 그래프 정의 1
b = tf.constant(3) # 그래프 정의 2
c = tf.add(a, b) # 그래프 정의 3
with tf.compat.v1.Session() as sess:
result = sess.run(c) # 정의된 그래프를 바탕으로 실제 연산이 일어남
print(result) # 5
위 코드에서는 즉시 실행 모드를 그래프 실행 모드로 변환을 해줬다.
그래프는 연산자(Operations)와 텐서(Tensors)로 이루어져 있습니다.
그래프는 데이터의 흐름을 나타내며, 각 노드는 연산자를 나타내고, 엣지는 텐서의 흐름(데이터의 흐름)을 나타냅니다.
하지만 그래프는 단순히 연산의 구조를 정의하는 역할을 하고,
실제 데이터는 세션(Session)을 통해 그래프에서 실행될 때 메모리에 저장됩니다.
요약하면 TensorFlow에서는 그래프가 연산의 구조를 정의하고, 세션에서 그래프가 실행될 때 데이터가 해당 구조에 맞게
흐르게 됩니다.
그러나, 위 코드는 틀린 코드이다, 아래가 수정된 정상적인 코드이다. 왜 틀렸는지는 아래의 XLA 컴파일러 설명을 들으면
알 것이다.
import tensorflow as tf
# 그래프 모드에서의 계산
tf.compat.v1.disable_eager_execution() # 즉시 실행 비활성화
tf.config.optimizer.set_jit(True) # XLA 컴파일러 활성화(그래프 실행 모드는 XLA 컴파일이 필요)
a = tf.constant(2)
b = tf.constant(3)
c = tf.add(a, b)
with tf.compat.v1.Session() as sess:
result = sess.run(c)
print(result) # 5
XML( Accelerated Linear Algebra) 컴파일러 - tensorflow에서 제공하는 텐서 연산을 최적화해주는 컴파일러
-> 그래프 실행 모드에서 하나 알아 둬야 할 것이 있다. 바로, 그래프 실행 모드에서는 반드시 XML 컴파일을 사용한다는 점이다.
import tensorflow as tf
# 그래프 모드에서의 계산
tf.compat.v1.disable_eager_execution() # 즉시 실행 비활성화
tf.config.optimizer.set_jit(True) # XLA 컴파일러 활성화
# 노드 1,2,3이 Edge로 연결됨.
a = tf.constant(2) # 그래프 노드 1
b = tf.constant(3) # 그래프 노드 2
c = tf.add(a, b) # 그래프 노드 3
with tf.compat.v1.Session() as sess:
result = sess.run(c) # 실행 전에 XLA 컴파일러고 위에서 정의된 그래프 구조(연산 구조)를 최적화!
print(result) # 5
그래프 실행 모드는 Session()을 통해 연산을 실행하게 되는데, 그 이전에 정의된 그래프 노드1~3에서 정의해 놓은
연산 구조를 XLA 컴파일러가 보고, 최적화하는 과정을 거친 다음에, run()을 통해 실행을 한다.
아래는 또다른 형식의 그래프 모드 실행이다.
import tensorflow as tf
# 그래프 생성
graph = tf.Graph()
# 그래프에 연산 추가
with graph.as_default():
a = tf.constant(2)
b = tf.constant(3)
c = tf.add(a, b)
# 그래프 실행
with tf.Session(graph=graph) as sess:
# XLA 컴파일러를 사용하도록 설정
options = tf.ConfigProto()
options.graph_options.optimizer_options.global_jit_level = tf.OptimizerOptions.ON_1
# 그래프 실행
result = sess.run(c, options=options)
print(result) # 5
'딥러닝(Deep Learning) > 컴퓨터 비전' 카테고리의 다른 글
yolov5을 사용하기 위한 Pytorch gpu 연동(Feat. CUDA,cudnn) (0) | 2024.01.31 |
---|---|
tensorflow-gpu 패키지 설치 tip(feat. 아나콘다,cuda,cudnn) (0) | 2024.01.26 |
ModuleNotFoundError: No module named PyQt5(Feat. pylint) (0) | 2024.01.18 |
Snake Curve(Feat. internal Energy, image Energy) (0) | 2024.01.12 |
SLIC(Simple Linear Iterative Clustering)(Feat. Super Pixel)의 동작 과정 (0) | 2024.01.10 |