Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python과 TensorFlow를 활용한 선형 모델 학습 완벽 가이드

TensorFlow란 무엇인가?

TensorFlow는 Google이 개발한 대표적인 머신러닝 프레임워크입니다. 오픈소스로 공개되어 있으며, Python과 함께 사용하여 다양한 알고리즘, 딥러닝 애플리케이션 등을 구현할 수 있습니다. 연구 목적뿐만 아니라 실제 프로덕션 환경에서도 널리 활용되고 있습니다.

'tensorflow' 패키지는 Windows 환경에서 아래 명령어 한 줄로 간단히 설치할 수 있습니다.

pip install tensorflow

텐서(Tensor)의 이해

텐서는 TensorFlow에서 사용되는 핵심 데이터 구조입니다. 데이터 흐름 그래프(Data Flow Graph)에서 노드들을 연결하는 역할을 하며, 본질적으로 다차원 배열 또는 리스트에 해당합니다. 텐서는 다음 세 가지 주요 속성으로 식별할 수 있습니다.

  • 랭크(Rank) – 텐서의 차원 수를 나타냅니다. 텐서의 차수 또는 정의된 차원의 개수로 이해할 수 있습니다.
  • 타입(Type) – 텐서 요소에 할당된 데이터 타입을 의미합니다. 1차원, 2차원 또는 n차원 형태가 될 수 있습니다.
  • 셰이프(Shape) – 행과 열의 개수를 함께 나타낸 값입니다.

이 글에서는 Jupyter Notebook을 사용해 코드를 실행합니다. 마찬가지로 'pip install tensorflow' 명령어를 통해 Jupyter Notebook 환경에도 TensorFlow를 설치할 수 있습니다.

선형 모델 학습 예제 코드

다음은 TensorFlow를 사용하여 간단한 선형 회귀 모델(y = Ax + b)을 학습시키는 전체 코드입니다.

import tensorflow as tf

A = tf.get_variable("A", initializer=tf.constant([0.1]))
b = tf.get_variable("b", initializer=tf.constant([0.0]))

x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)

my_model = A * x + b

lossVal = tf.reduce_sum(tf.square(my_model - y))

my_optimizer = tf.train.GradientDescentOptimizer(0.01)
train = my_optimizer.minimize(lossVal)

x_train = [1.0, 2.5, 3.8, 4.9]
y_train = [1.7, 3.0, 6.6, 6.8]

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(1000):
        sess.run(train, {x:x_train, y:y_train})
        if i%100==0:
            l_cost = sess.run(lossVal, {x:x_train, y:y_train})
            print(f"i: {i} cost: {l_cost}")
    l_A, l_b, l_cost = sess.run([A, b, lossVal], {x:x_train, y:y_train})
    print(f"A: {l_A} b: {l_b} cost: {l_cost}")

실행 결과

i: 0 cost: 1.7808341979980469
i: 100 cost: 1.6947696208953857
i: 200 cost: 1.691591501235962
i: 300 cost: 1.6913959980010986
i: 400 cost: 1.6913844347000122
i: 500 cost: 1.6913840770721436
i: 600 cost: 1.6913843154907227
i: 700 cost: 1.691383719444275
i: 800 cost: 1.6913838386535645
i: 900 cost: 1.6913845539093018
A: [1.4599526] b: [0.07214472] cost: 1.6913845539093018

코드 상세 설명

  • 필요한 패키지를 임포트하고 별칭(alias)을 지정하여 코드 작성 시 편의성을 높입니다.
  • 'my_model'이라는 변수를 정의하여 선형 모델의 일반적인 형태(Ax + b)를 저장합니다.
  • 이 선형 모델은 'GradientDescentOptimizer'(경사 하강법 최적화 도구)를 통해 학습됩니다.
  • 'minimize' 메서드를 사용하여 손실값(loss)이 최소화되도록 학습을 진행합니다.
  • 학습용 입력 데이터(x_train)와 정답 데이터(y_train)를 담은 두 개의 리스트를 생성합니다.
  • 생성된 데이터로 모델을 반복 학습시킨 후, 최종적으로 구해진 기울기(A), 절편(b) 및 손실값을 콘솔에 출력합니다.

출력 결과를 보면 반복 횟수가 늘어날수록 비용(cost)이 1.78에서 약 1.691로 수렴하는 것을 확인할 수 있습니다. 이는 모델이 데이터에 맞게 점진적으로 최적화되고 있음을 의미합니다.

참고: 위 코드는 TensorFlow 1.x 스타일의 API(get_variable, placeholder, Session 등)를 사용합니다. TensorFlow 2.x 환경에서 실행하려면 import tensorflow.compat.v1 as tftf.disable_v2_behavior()를 추가하면 동일하게 동작합니다.