Python에서 딥러닝 시작하기: TensorFlow와 Keras
목차
- 서론
- 딥러닝이란?
- TensorFlow와 Keras 소개
- 개발 환경 설정
- 기본 딥러닝 모델 만들기
- 데이터셋 불러오기
- 데이터 전처리
- 모델 구성
- 모델 컴파일
- 모델 학습
- 모델 평가와 예측
- 하이퍼파라미터 튜닝
- 모델 저장과 불러오기
- 실습 예제: 손글씨 숫자 인식 (MNIST)
- 결론
- 추천 태그
1. 서론
딥러닝은 인공지능 분야의 핵심 기술로, 복잡한 데이터를 분석하고 패턴을 학습하여 다양한 문제를 해결합니다. 이번 포스팅에서는 딥러닝을 시작하는 초보 개발자들을 위해 Python의 TensorFlow와 Keras를 사용하여 딥러닝 모델을 구축하는 방법을 소개하겠습니다.
2. 딥러닝이란?
딥러닝은 인공신경망을 기반으로 하는 기계 학습의 한 분야로, 대량의 데이터를 학습하여 복잡한 패턴을 인식하고 예측하는 알고리즘입니다. 주요 응용 분야로는 이미지 인식, 자연어 처리, 음성 인식 등이 있습니다.
3. TensorFlow와 Keras 소개
TensorFlow는 구글이 개발한 오픈 소스 딥러닝 프레임워크로, 높은 성능과 확장성을 자랑합니다. Keras는 TensorFlow 위에서 동작하는 고수준 API로, 간단하고 직관적인 코드 작성이 가능하여 딥러닝 모델을 빠르게 프로토타입할 수 있습니다.
4. 개발 환경 설정
TensorFlow와 Keras를 설치하려면 다음 명령어를 사용합니다:
pip install tensorflow
설치가 완료되면 다음 코드를 통해 TensorFlow와 Keras가 제대로 설치되었는지 확인할 수 있습니다:
import tensorflow as tf
print("TensorFlow version:", tf.__version__)
print("Keras version:", tf.keras.__version__)
5. 기본 딥러닝 모델 만들기
5.1 데이터셋 불러오기
TensorFlow는 다양한 내장 데이터셋을 제공하며, 그 중 MNIST 데이터셋을 사용하여 손글씨 숫자 인식을 예제로 다뤄보겠습니다.
from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
print("Training data shape:", x_train.shape)
print("Test data shape:", x_test.shape)
5.2 데이터 전처리
데이터를 신경망에 입력하기 전에 전처리가 필요합니다. 이미지 데이터를 정규화하고, 라벨을 원-핫 인코딩합니다.
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
x_train = x_train.reshape(-1, 28, 28, 1)
x_test = x_test.reshape(-1, 28, 28, 1)
from tensorflow.keras.utils import to_categorical
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
5.3 모델 구성
Keras의 Sequential API를 사용하여 간단한 CNN(Convolutional Neural Network) 모델을 구성합니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
model = Sequential([
Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(64, kernel_size=(3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dense(128, activation='relu'),
Dense(10, activation='softmax')
])
5.4 모델 컴파일
모델을 학습하기 위해 옵티마이저, 손실 함수, 평가 지표를 설정합니다.
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
5.5 모델 학습
훈련 데이터를 사용하여 모델을 학습시킵니다.
model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
6. 모델 평가와 예측
테스트 데이터를 사용하여 모델의 성능을 평가하고 예측을 수행합니다.
loss, accuracy = model.evaluate(x_test, y_test)
print("Test Accuracy:", accuracy)
predictions = model.predict(x_test)
print("Predictions:", predictions[:5])
7. 하이퍼파라미터 튜닝
딥러닝 모델의 성능을 향상시키기 위해 하이퍼파라미터 튜닝이 필요합니다. Keras Tuner를 사용하여 최적의 하이퍼파라미터를 찾을 수 있습니다.
import keras_tuner as kt
def build_model(hp):
model = Sequential()
model.add(Conv2D(hp.Int('filters', min_value=32, max_value=128, step=32),
kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(hp.Int('units', min_value=32, max_value=128, step=32), activation='relu'))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
return model
tuner = kt.Hyperband(build_model,
objective='val_accuracy',
max_epochs=10,
factor=3,
directory='my_dir',
project_name='intro_to_kt')
tuner.search(x_train, y_train, epochs=10, validation_split=0.2)
best_hps = tuner.get_best_hyperparameters(num_trials=1)[0]
8. 모델 저장과 불러오기
훈련된 모델을 저장하고 나중에 다시 사용할 수 있습니다.
model.save('mnist_cnn_model.h5')
from tensorflow.keras.models import load_model
loaded_model = load_model('mnist_cnn_model.h5')
9. 실습 예제: 손글씨 숫자 인식 (MNIST)
앞서 설명한 과정을 종합하여 MNIST 데이터셋을 사용한 손글씨 숫자 인식 예제를 완성해보겠습니다.
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.utils import to_categorical
import keras_tuner as kt
import joblib
# 데이터셋 불러오기
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 데이터 전처리
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
x_train = x_train.reshape(-1, 28, 28, 1)
x_test = x_test.reshape(-1, 28, 28, 1)
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
# 모델 구성
model = Sequential([
Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(64, kernel_size=(3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dense(128, activation='relu'),
Dense(10, activation='softmax')
])
# 모델 컴파일
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 모델 학습
model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
# 모델 평가
loss, accuracy = model.evaluate(x_test, y_test)
print("Test Accuracy:", accuracy)
# 모델 저장
model.save('mnist_cnn_model.h5')
# 모델 불러오기
loaded_model = load_model('mnist_cnn_model.h5')
# 불러온 모델 평가
loaded_loss, loaded_accuracy = loaded_model.evaluate(x_test, y_test)
print("Loaded Model Accuracy:", loaded_accuracy)
10. 결론
이번 포스팅에서는 Python의 TensorFlow와 Keras를 사용하여 딥러닝 모델을 구축하고, 학습시키며, 평가하는 방법을 다뤘습니다. 딥러닝 모델을 구축하는 과정은 데이터 전처리, 모델 구성, 모델 학습, 모델 평가 등의 단계로 나눌 수 있습니다. Keras를 사용하면 복잡한 신경망 모델을 간단하게 구현할 수 있으며, TensorFlow의 강력한 기능을 활용하여 다양한 딥러닝 문제를 해결할 수 있습니다.