레이블이 numpy인 게시물을 표시합니다. 모든 게시물 표시
레이블이 numpy인 게시물을 표시합니다. 모든 게시물 표시

20241230

TensorFlow와 Keras를 활용한 딥러닝 모델 개발

딥러닝은 머신러닝의 한 분야로, 복잡한 데이터를 학습하여 예측 또는 분류를 수행하는 기술입니다. TensorFlow와 Keras는 딥러닝 모델을 쉽게 구축하고 학습할 수 있도록 도와주는 강력한 도구입니다. 이 글에서는 TensorFlow와 Keras를 사용하여 간단한 딥러닝 모델을 개발하는 방법을 단계별로 설명합니다.

1. 개발 환경 설정

먼저, TensorFlow와 Keras를 설치하고 개발 환경을 설정합니다.

# TensorFlow와 Keras 설치
!pip install tensorflow

# 필요한 라이브러리 임포트
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

2. 데이터 준비

이 예제에서는 MNIST 데이터셋을 사용합니다. MNIST는 0부터 9까지의 손글씨 숫자 이미지 데이터셋입니다.

# MNIST 데이터셋 로드
mnist = keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 데이터 정규화 (0~1 범위로 스케일링)
x_train, x_test = x_train / 255.0, x_test / 255.0

# 데이터 형태 확인
print("Train data shape:", x_train.shape)
print("Test data shape:", x_test.shape)

출력:

Train data shape: (60000, 28, 28)
Test data shape: (10000, 28, 28)

이미지 예시:

MNIST 이미지 예시

(출처: 위키미디어)

3. 모델 구성

Keras의 Sequential API를 사용하여 간단한 신경망 모델을 구성합니다.

# 모델 구성
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),  # 입력층 (28x28 이미지를 1D 배열로 변환)
    keras.layers.Dense(128, activation='relu'),  # 은닉층 (128개의 노드, ReLU 활성화 함수)
    keras.layers.Dropout(0.2),                   # 드롭아웃 (과적합 방지)
    keras.layers.Dense(10, activation='softmax') # 출력층 (10개의 노드, 소프트맥스 활성화 함수)
])

# 모델 요약 출력
model.summary()

출력:

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 flatten (Flatten)           (None, 784)               0         
 dense (Dense)               (None, 128)               100480    
 dropout (Dropout)           (None, 128)               0         
 dense_1 (Dense)             (None, 10)                1290      
=================================================================
Total params: 101,770
Trainable params: 101,770
Non-trainable params: 0
_________________________________________________________________

4. 모델 학습

모델을 컴파일하고 학습 데이터를 사용하여 학습시킵니다.

# 모델 컴파일
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 모델 학습
history = model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))

출력:

Epoch 1/5
1875/1875 [==============================] - 5s 2ms/step - loss: 0.2960 - accuracy: 0.9140 - val_loss: 0.1421 - val_accuracy: 0.9576
Epoch 2/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.1430 - accuracy: 0.9578 - val_loss: 0.1005 - val_accuracy: 0.9693
...

학습 과정 시각화:

학습 과정 시각화

5. 모델 평가

테스트 데이터를 사용하여 모델의 성능을 평가합니다.

# 모델 평가
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print(f"\nTest accuracy: {test_acc:.4f}")

출력:

313/313 - 0s - loss: 0.0756 - accuracy: 0.9771
Test accuracy: 0.9771

6. 모델 활용

학습된 모델을 사용하여 새로운 데이터에 대한 예측을 수행합니다.

# 테스트 데이터 예측
predictions = model.predict(x_test)

# 첫 번째 테스트 데이터 예측 결과 확인
print("Predicted label:", np.argmax(predictions[0]))
print("Actual label:", y_test[0])

출력:

Predicted label: 7
Actual label: 7

7. 추가 학습 및 개선

모델의 성능을 더욱 개선하기 위해 다음과 같은 방법을 시도할 수 있습니다:

  1. 은닉층의 수와 노드 수를 조정합니다.
  2. 학습률(learning rate)을 변경합니다.
  3. 데이터 증강(data augmentation)을 적용합니다.
  4. 더 복잡한 모델(CNN, RNN 등)을 사용합니다.

결론

이 글에서는 TensorFlow와 Keras를 사용하여 간단한 딥러닝 모델을 개발하는 방법을 단계별로 설명했습니다. MNIST 데이터셋을 활용하여 모델을 구성하고 학습하며, 모델의 성능을 평가하고 예측을 수행하는 과정을 다뤘습니다. 딥러닝은 다양한 분야에서 활용될 수 있는 강력한 기술이므로, 지속적인 학습과 실습을 통해 더욱 발전시켜 보세요.

참고 자료