TensorFlow는 강력한 머신러닝 프레임워크로, 그 작동 원리를 이해하기 위해서는 텐서(Tensor), 연산 그래프(Operation Graph), 세션(Session)과 같은 핵심 개념들을 깊이 있게 이해하는 것이 중요합니다. 이 글에서는 이러한 개념들을 자세히 설명하고, 예제를 통해 그 사용법을 소개합니다.
TensorFlow의 핵심 개념 (텐서, 연산 그래프, 세션)
텐서(Tensor)
텐서는 다차원 배열의 일반화된 형태로, TensorFlow의 기본 데이터 구조입니다. 텐서는 다양한 차원과 형식을 가지며, 이를 통해 복잡한 데이터를 효율적으로 표현할 수 있습니다. 텐서의 차원은 랭크(rank)로 불리며, 각 랭크에 따라 다음과 같이 분류할 수 있습니다.
- 스칼라 (0차원 텐서): 단일 값 (예: 3.0)
- 벡터 (1차원 텐서): 값의 배열 (예: [1.0, 2.0, 3.0])
- 행렬 (2차원 텐서): 값의 2차원 배열 (예: [[1.0, 2.0], [3.0, 4.0]])
- 고차원 텐서: 값의 다차원 배열 (예: [[[1.0, 2.0], [3.0, 4.0]], [[5.0, 6.0], [7.0, 8.0]]])
텐서는 TensorFlow의 tf.constant
, tf.Variable
과 같은 함수를 사용하여 생성할 수 있습니다. 예를 들어, tf.constant
는 변경 불가능한 상수 텐서를 생성하고, tf.Variable
은 변경 가능한 변수 텐서를 생성합니다.
import tensorflow as tf
# 스칼라 텐서
scalar = tf.constant(3.0)
# 벡터 텐서
vector = tf.constant([1.0, 2.0, 3.0])
# 행렬 텐서
matrix = tf.constant([[1.0, 2.0], [3.0, 4.0]])
# 고차원 텐서
high_dim_tensor = tf.constant([[[1.0, 2.0], [3.0, 4.0]], [[5.0, 6.0], [7.0, 8.0]]])
# 변수 텐서
variable_tensor = tf.Variable([1.0, 2.0, 3.0])
텐서의 주요 속성은 다음과 같습니다.
- shape: 텐서의 차원 크기를 나타냅니다.
- dtype: 텐서의 데이터 타입을 나타냅니다.
- rank: 텐서의 차원 수를 나타냅니다.
print("Shape of tensor:", scalar.shape) # 출력: Shape of tensor: ()
print("Data type of tensor:", scalar.dtype) # 출력: Data type of tensor: <dtype: 'float32'>
print("Rank of tensor:", tf.rank(scalar)) # 출력: Rank of tensor: 0
연산 그래프(Operation Graph)
연산 그래프는 텐서 간의 연산을 표현하는 그래프 구조입니다. 연산 그래프의 각 노드는 연산(Operation)을, 각 에지는 데이터의 흐름을 나타냅니다. TensorFlow는 이러한 연산 그래프를 통해 복잡한 계산 과정을 효율적으로 표현하고 최적화합니다. 연산 그래프를 통해 병렬 연산, 분산 학습 등 다양한 최적화를 수행할 수 있습니다.
예를 들어, 두 개의 상수 텐서를 더하는 연산 그래프를 생성하는 예제는 다음과 같습니다:
# 두 개의 상수 텐서 생성
a = tf.constant(2.0)
b = tf.constant(3.0)
# 두 텐서를 더하는 연산 생성
c = tf.add(a, b)
이 예제에서 a
와 b
는 텐서이고, c
는 두 텐서의 합을 나타내는 연산 그래프입니다. TensorFlow 2.x에서는 즉시 실행 모드(Eager Execution)가 기본으로 활성화되어 있어, 연산 그래프를 작성하고 즉시 실행할 수 있습니다.
# TensorFlow 2.x에서의 즉시 실행 모드
print(c) # 출력: tf.Tensor(5.0, shape=(), dtype=float32)
세션(Session)
세션은 연산 그래프를 실행하기 위한 환경입니다. TensorFlow 1.x에서는 세션을 명시적으로 생성하고 관리해야 했습니다. 세션을 사용하여 연산 그래프를 실행하고, 결과를 얻을 수 있었습니다.
import tensorflow as tf
# TensorFlow 1.x 세션 사용 예제
with tf.Session() as sess:
result = sess.run(c)
print(result) # 출력: 5.0
그러나 TensorFlow 2.x에서는 즉시 실행 모드가 기본으로 활성화되어 있어, 세션을 명시적으로 생성할 필요가 없습니다. 대신 tf.function
을 사용하여 그래프 모드를 활성화할 수 있습니다.
그래프 모드는 코드의 성능을 최적화하고, TensorFlow 1.x의 세션과 유사한 동작을 제공합니다.
import tensorflow as tf
# tf.function을 사용한 그래프 모드
def add_tensors(x, y):
return x + y
a = tf.constant(2.0)
b = tf.constant(3.0)
result = add_tensors(a, b)
print(result) # 출력: tf.Tensor(5.0, shape=(), dtype=float32)
이로써 TensorFlow의 기본 개념인 텐서, 연산 그래프, 세션에 대해 살펴보았습니다. 이러한 개념들을 이해하면 TensorFlow로 다양한 머신러닝 모델을 구축하고 실행하는 데 도움이 될 것입니다. 다음 글에서는 TensorFlow를 사용하여 간단한 연산을 수행하는 방법에 대해 알아보겠습니다.