Technology issues/TensorFlow

파이썬 TensorFlow로 머신러닝 시작하기. 텐서, 그래프, 세션 기초 - TensorFlow #2

pauls 2024. 7. 3. 07:59
반응형

TensorFlow는 강력한 머신러닝 프레임워크로, 그 작동 원리를 이해하기 위해서는 텐서(Tensor), 연산 그래프(Operation Graph), 세션(Session)과 같은 핵심 개념들을 깊이 있게 이해하는 것이 중요합니다. 이 글에서는 이러한 개념들을 자세히 설명하고, 예제를 통해 그 사용법을 소개합니다.

파이썬 TensorFlow로 머신러닝 시작하기
파이썬 TensorFlow로 머신러닝 시작하기

 

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)

이 예제에서 ab는 텐서이고, 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을 사용한 그래프 모드 @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를 사용하여 간단한 연산을 수행하는 방법에 대해 알아보겠습니다.

반응형