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

TensorFlow를 활용한 MNIST 데이터셋 모델 정의 방법 완벽 가이드


TensorFlow는 구글(Google)이 제공하는 머신러닝 프레임워크입니다. 오픈소스 기반으로 개발되었으며, Python과 함께 사용하여 다양한 알고리즘, 딥러닝 애플리케이션 등을 구현할 수 있습니다. 복잡한 수학 연산을 빠르게 처리할 수 있는 최적화 기법을 갖추고 있는데, 이는 내부적으로 NumPy와 다차원 배열을 활용하기 때문입니다. 이러한 다차원 배열은 '텐서(tensor)'라고도 불립니다. TensorFlow 프레임워크는 딥러닝 신경망 작업을 폭넓게 지원합니다.

TensorFlow 설치하기

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

pip install tensorflow

텐서(Tensor)란 무엇인가?

텐서는 TensorFlow에서 사용되는 기본 데이터 구조입니다. 플로우 다이어그램(flow diagram)에서 각 노드를 연결하는 역할을 하며, 이 다이어그램은 '데이터 플로우 그래프(Data flow graph)'라고 합니다. 텐서는 특별한 것이 아니라 단순히 다차원 배열 또는 리스트를 의미합니다.

Keras 소개

Keras는 Python으로 작성된 딥러닝 API입니다. 높은 수준의 추상화를 제공하는 고수준(High-level) API로, 생산성 높은 인터페이스를 통해 머신러닝 문제를 손쉽게 해결할 수 있도록 도와줍니다. Keras는 TensorFlow 프레임워크 위에서 동작하며, 빠른 실험과 프로토타이핑을 목적으로 만들어졌습니다. Keras는 이미 TensorFlow 패키지에 포함되어 있어 아래 코드 한 줄로 바로 사용할 수 있습니다.

import tensorflow
from tensorflow import keras

Google Colaboratory 실행 환경

본 예제 코드는 Google Colaboratory(Colab)에서 실행됩니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 설정이 필요 없고 GPU(그래픽 처리 장치)를 무료로 사용할 수 있다는 큰 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.

예제 코드

다음은 MNIST 데이터셋을 위한 순차형(Sequential) 모델을 정의하는 코드입니다.

print("Defining a sequential model")
def create_model():
    model = tf.keras.models.Sequential([
        keras.layers.Dense(512, activation='relu', input_shape=(784,)),
        keras.layers.Dropout(0.2),
        keras.layers.Dense(10)
    ])

    model.compile(optimizer='adam',
        loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),
        metrics=[tf.metrics.SparseCategoricalAccuracy()])

    return model

print("Creating a model instance")
model = create_model()

print("Displaying the architecture of the sequential model")
model.summary()

코드 출처 - https://www.tensorflow.org/tutorials/keras/save_and_load

실행 결과

TensorFlow를 활용한 MNIST 데이터셋 모델 정의 방법 완벽 가이드

코드 상세 설명

  • 순차형 모델 생성: Keras의 Sequential API를 사용하여 층을 순서대로 쌓는 모델을 생성합니다.

  • Dense 레이어 구성: 784개의 입력(28x28 픽셀 이미지)을 받아 512개의 뉴런을 가진 완전연결(Dense) 레이어를 첫 번째 층으로 구성하고, ReLU 활성화 함수를 적용합니다.

  • Dropout 적용: 과적합(overfitting)을 방지하기 위해 20% 확률로 드롭아웃(Dropout) 레이어를 추가합니다.

  • 출력 레이어: MNIST의 10개 숫자 클래스(0~9)에 대응하는 10개의 출력 뉴런을 가진 Dense 레이어로 마무리합니다.

  • 모델 컴파일: 옵티마이저는 'adam'을, 손실 함수는 SparseCategoricalCrossentropy를, 평가 지표로는 SparseCategoricalAccuracy를 설정하여 모델을 컴파일합니다.

  • 모델 요약 출력: 'summary' 메서드를 호출하여 생성된 모델의 구조, 파라미터 수 등 상세 정보를 화면에 출력합니다.