개발 창고/AI

신경망 기본 실습: 간단한 이미지 분류 모델 만들기

Royzero 2025. 8. 17. 22:00
반응형

1. 신경망(Neural Network) 복습

신경망은 여러 개의 뉴런(Neuron) 이 층(Layer) 형태로 연결된 구조입니다.
데이터가 입력층(Input Layer)은닉층(Hidden Layer)출력층(Output Layer) 을 거치며 점차 복잡한 패턴을 학습합니다.


1.1 신경망의 주요 요소

  • 가중치(Weight): 입력 데이터의 중요도를 조절
  • 활성화 함수(Activation Function): 뉴런이 출력을 낼지 결정 (ReLU, Sigmoid 등)
  • 손실 함수(Loss Function): 예측값과 실제값 차이를 측정
  • 옵티마이저(Optimizer): 가중치를 조정해 손실을 최소화 (SGD, Adam 등)

2. 왜 신경망을 쓰는가?

머신러닝 전통 기법은 사람이 특징을 직접 뽑아야 했습니다.
반면 신경망은 데이터에서 특징을 자동으로 학습합니다.

예시:

  • 전통적 방법: 사진에서 "고양이 귀, 수염 길이" 등을 사람이 정의
  • 신경망: 수많은 사진을 학습해 고양이를 스스로 인식

3. 이미지 분류(Image Classification)란?

이미지 분류는 주어진 사진이 어떤 클래스(종류)에 속하는지 판별하는 작업입니다.
예: MNIST 데이터셋 → 28x28 픽셀 손글씨 숫자 이미지를 0~9로 분류


4. 딥러닝 개발 절차

  1. 데이터 준비: 학습/검증 데이터셋 구분
  2. 모델 설계: 층(Layer) 쌓기
  3. 학습(Training): 데이터로 가중치 최적화
  4. 평가(Evaluation): 정확도, 손실값 확인
  5. 예측(Prediction): 새로운 입력에 결과 출력

5. 실습 – MNIST 손글씨 분류 (TensorFlow/Keras)

환경 준비

pip install tensorflow

import tensorflow as tf
from tensorflow.keras import layers, models

# 1. 데이터 로드
(X_train, y_train), (X_test, y_test) = tf.keras.datasets.mnist.load_data()

# 2. 데이터 전처리
X_train = X_train.reshape(-1, 28, 28, 1).astype("float32") / 255.0
X_test = X_test.reshape(-1, 28, 28, 1).astype("float32") / 255.0

# 3. 신경망 모델 구성
model = models.Sequential([
    layers.Flatten(input_shape=(28, 28, 1)),     # 28x28 → 784 벡터
    layers.Dense(128, activation="relu"),        # 은닉층
    layers.Dense(10, activation="softmax")       # 출력층 (숫자 0~9)
])

# 4. 컴파일
model.compile(optimizer="adam",
              loss="sparse_categorical_crossentropy",
              metrics=["accuracy"])

# 5. 학습
model.fit(X_train, y_train, epochs=5, validation_data=(X_test, y_test))

# 6. 평가
test_loss, test_acc = model.evaluate(X_test, y_test)
print("테스트 정확도:", f"{test_acc*100:.2f}%")

6. 실행 결과 예시

Epoch 1/5
1875/1875 [==============================] - 5s 2ms/step - loss: 0.3000 - accuracy: 0.9130 - val_loss: 0.1430 - val_accuracy: 0.9580
...
테스트 정확도: 97.8%

7. 오늘의 핵심 요약

  • 신경망은 가중치 + 활성화 함수로 이루어진 계층적 구조
  • 이미지 분류는 대표적인 신경망 활용 분야
  • TensorFlow/Keras로 간단한 모델을 쉽게 구현 가능
  • MNIST 데이터셋으로 97% 이상 정확도 달성

반응형