본문 바로가기

DEVELOPMENT/TensorFlow

[TensorFlow] 텐서플로 2.0 시작하기

TensorFlow

 

1. TensorFlow

구글에서 개발한 오픈소스 딥러닝 프레임워크이다. 기계 학습 및 딥러닝 모델을 구축하고 실행하는데 사용된다.

딥러닝 모델을 만들기 위한 도구와 기능을 제공하여 개발자들이 모델을 훈련시키고 예측을 수행하는 과정을 쉽게 할 수 있도록 도와준다.

텐서플로는 이미지 인식, 반복신경망 구성, 기계 번역, 필기 숫자 판별 등 다양한 신경망 학습 작업에 사용된다. 이를 통해 이미지나 텍스트 등 다양한 데이터에서 패턴을 인식하고 예측하는데 활용된다. 텐서플로는 사용자에게 유연성과 성능을 제공하며, 대규모 데이터셋에서도 효율적으로 작동할 수 있다.

 

2. Tensor

텐서플로의 핵심 개념은 텐서(Tensor)이다. 텐서는 다차원 배열로, 숫자 데이터를 표현하는데 사용된다.

스칼라(0차원 텐서)는 단일 숫자를 나타내고, 벡터(1차원 텐서)는 숫자의 배열을 나타내며, 행렬(2차원 텐서)는 2차원 배열을 나타낸다. 이러한 텐서들을 조합하여 고차원의 데이터 구조를 표현할 수 있다.

 

 

TensorFlow 사용 방법

 

1. 텐서(Tensor) 생성

텐서플로에서는 tf.Tensor 객체를 사용하여 텐서를 생성한다. tf.constant, tf.Variable, 또는 다양한 텐서 생성 함수를 사용하여 원하는 데이터로 텐서를 초기화할 수 있다.

2. 모델 구성

텐서플로에서는 주로 tf.keras API를 사용하여 모델을 구성한다. Sequential 모델이나 함수형 API를 사용하여 층을 쌓고, 활성화 함수, 손실 함수, 옵티마이저 등을 설정한다.

3. 모델 훈련

훈련 데이터를 사용하여 모델을 훈련시킨다. fit() 메서드를 사용하여 입력 데이터와 대상 레이블을 제공하고, 에포크(epoch) 수와 배치 크기 등을 설정한다.

4. 모델 평가 및 예측

훈련된 모델을 사용하여 새로운 데이터에 대한 예측을 수행하거나 모델의 성능을 평가할 수 있다. evaluate() 메서드 또는 predict() 메서드를 사용한다.

 

 

TensorFlow 설정

 

import tensorflow as tf
print("TensorFlow version:", tf.__version__) # TensorFlow version: 2.11.0

TensorFlow 라이브러리를 파이썬 환경에 가져와서 사용하기 위해 import 해주고, 현재 TensorFlow의 버전을 확인해준다.

 

 

데이터셋 로드

 

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

TensorFlow 에서 제공하는 MNIST 데이터셋을 로드하는 과정이다.

TensorFlow의 keras.datasets 모듈에서 MNIST 데이터셋을 가져와 훈련 세트와 테스트 세트로 나눈 후, 이미지 데이터를 정규화한다.

MNIST 이미지 데이터는 0부터 255까지의 픽셀 값으로 구성되어 있는데, 255로 나누어 0에서 1사이의 범위로 정규화한다. 이렇게 정규화를 수행하면 모델이 더 빠르게 수렴하고 좋은 성능을 발휘할 수 있다.

 

1. MNIST

손으로 쓴 숫자들로 구성된 대표적인 데이터셋이다. Modified National Institute of Standards and Technology의 약자로, 손글씨 숫자 이미지 데이터셋이다. MNIST 데이터셋은 0부터 9까지의 숫자를 손으로 쓴 28x28 픽셀의 흑백 이미지로 구성되어 있다. 전체 데이터셋은 60,000개의 훈련 이미지와 10,000개의 테스트 이미지로 구성된다.

MNIST 데이터셋은 TensorFlow와 Keras 같은 머신러닝 및 딥러닝 프레임워크에서 제공하는 API 를 사용하여 쉽게 로드하고 사용할 수 있다. 이를 통해 모델 개발과 성능 평가를 빠르게 진행할 수 있다.

 

2. Keras

텐서플로우의 고수준 API로, 신경망 모델을 쉽게 구축하고 훈련할 수 있도록 도와준다. Keras는 사용하기 쉽고 직관적인 인터페이스를 제공하며, 다양한 딥러닝 모델의 구성 요소를 제공한다.

 

 

머신 러닝 모델 빌드

 

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

Sequential 모델을 생성하고 컴파일한다.

입력 이미지를 1차원 형태로 평탄화 시키는 레이어, 128개의 뉴런을 가진 fully-connected 레이어(활성화 함수 ReLU 사용), 20%의 드롭아웃 비율을 가지는 드롭아웃 레이어, 10개의 뉴런을 가진 fully-connected레이어(활성화 함수 softmax 사용)를 추가하여 모델을 구성한다.

Adam 최적화 알고리즘을 사용하고, 손실 함수로 sparse categorical crossentropy를 사용하고, 모델 성능을 평가하는 지표로 정확도를 사용하여 컴파일한다.

 

1. Sequential 모델

Sequential 모델은 Keras에서 제공하는 모델 클래스 중 하나로, 순차적으로 층을 쌓아 구성하는 신경망 모델이다. 즉, 입력부터 출력까지 데이터가 한 방향으로 순차적으로 흐르는 단순한 신경망 구조를 나타낸다.

Sequential 모델은 각 층(layer)을 차례대로 추가하여 모델을 구성한다. 각 층은 이전 층의 출력을 다음 층의 입력으로 전달한다. 이러한 방식으로 여러 개의 층을 쌓아 구성함으로써 복잡한 신경망 모델을 구현할 수 있다.

종류 설명
Dense Layer
(완전 연결 계층)
fully-connected(완전 연결) 레이어로, 이전 레이어의 모든 뉴런과 연결된다. 입력 데이터의 특성과 가중치를 곱하고 편향을 더한 후, 활성화 함수를 통과시켜 입력 데이터와 가중치 사이의 선형 결합과 비선형성을 도출할 수 있다.
- ReLU : 입력값이 0보다 작을 경우 0으로 출력하고, 0보다 큰 경우에는 입력값을 그대로 출력하는 함수이다.
- Softmax : 입력값을 0과 1사이의 확률값으로 변환하는 함수이다.
Convolutional Layer
(합성곱 계층)
합성곱 계층은 이미지의 공간적 구조를 인식하도록 최적화된 계층이며, 이미지 분류 작업에 흔히 사용된다.
LSTM Layer
LSTM 계층은 순환 신경망(RNN)의 한 형태로, 시간에 따른 패턴을 학습할 수 있으며 시퀀스 예측, 자연어 처리 등에 사용된다.
Dropout Layer 과적합을 방지하기 위해 사용되는 정규화 기법 중 하나이다. Dropout은 랜덤하게 일부 뉴런을 비활성화시키는 것으로, 학습 중에는 일부 뉴런이 사용되지 않게 되어 다른 뉴런들이 더욱 독립적으로 학습될 수 있도록 도와준다.
Flatten Layer 정보를 처리하거나 학습하는 것이 아니라 데이터의 형태를 1차원으로 변환하는 역할을 하는 계층이다. 모델에서 합성곱 계층과 같은 계층을 사용한 후, 완전 연결 계층을 사용하기 전에 일반적으로 사용된다.

 

2. Compile

모델 컴파일 단계에서 아래의 설정이 필요하다.

종류 설명
loss 훈련 중 모델이 얼마나 정확한지 측정한다. 모델을 올바른 방향으로 조정하려면 이 함수를 최소화해야 한다.
optimizer 모델이 인식하는 데이터와 해당 손실 함수를 기반으로 모델이 업데이트되는 방식이다.
metrics 훈련 및 테스트 단계를 모니터링하는 데 사용된다. 다음 예에서는 올바르게 분류된 이미지의 비율인 정확도를 사용한다.

 

3. loss

TensorFlow에서 제공하는 손실 함수는 모델의 예측이 실제 데이터와 얼마나 다른지를 측정하는 함수이다. 더 정확한 예측을 하기 위해, 이 손실을 최소화하는 모델의 매개변수를 찾는 것이 중요하다.

종류 설명
Binary Crossentropy 이진 분류 작업에 사용되는 손실 함수이다. 각 데이터 포인트마다 예측값과 실제값 사이의 로그 손실을 계산하고, 이를 평균하여 전체 손실을 얻는다.
Categorical Crossentropy 다중 분류 작업에 사용되는 손실 함수이다. 각 클래스의 확률 분포와 모델의 예측값 간의 차이를 측정하여 손실을 계산한다.
SparseCategorical Crossentropy 다중 분류 작업에서 실제값이 정수 형태로 주어지는 경우에 사용되는 손실함수이다. 레이블을 정수 형태로 제공하는 경우에 사용된다.

 

4. Optimizer

TensorFlow의 최적화 도구는 기계 학습 모델의 훈련을 도와주는 중요한 구성 요소이다. 예측 오차를 최소화하면서 모델의 매개 변수를 조정하는 것이다.

종류 설명
Gradient Descent Optimizer 가장 기본적인 형태의 Optimizer로서 모델의 오차를 최소화하는 데 사용된다.
데이터의 모든 값에서 기울기를 계산해 최적해를 찾는 가장 기초적인 방법이다.
Adagrad Optimizer 각 매개변수에 대해 학습률이 동적으로 조정되기 때문에 빠른 초기 진행과 느린 후속 진행의 이점을 제공한다.
Momentun Optimizer Gradient Descent보다 빠르게 수렴하기 위해 모멘텀(이전 단계의 그래디언트가 현재 단계에 영향을 주는) 개념을 사용한다. 
Adam Optimizer Momentum의 장점과 RMSprop의 장점을 합친 기법이다.

 

 

모델 훈련 및 평가

 

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test,  y_test, verbose=2)

model.fit(x_train, y_train, epochs=5)은 주어진 훈련 데이터셋 x_train과 해당 레이블 y_train을 사용하여 모델을 학습하는 과정이다. 이 메서드는 주어진 데이터로 모델을 지정된 에포크(epoch) 수만큼 훈련한다.

model.evaluate(x_test, y_test, verbose=2)은 훈련된 모델을 사용하여 테스트 데이터셋 x_test와 해당 레이블 y_test을 평가하는 과정이다. 이 메서드는 모델이 테스트 데이터셋에서의 성능을 평가하는 데 사용된다.

 

 

 

 

'DEVELOPMENT > TensorFlow' 카테고리의 다른 글

[TensorFlow] 워드 임베딩  (0) 2023.06.29
[TensorFlow] 기본 텍스트 분류  (0) 2023.06.29
[TensorFlow] 기본 이미지 분류  (0) 2023.06.29