
1. 케라스 개요
케라스(Keras)를 사용하여 딥러닝 프로세스에 따라 코드를 구현해 본다. Keras는 딥 러닝 모델을 쉽게 구축하고 훈련시킬 수 있는 고수준 딥 러닝 프레임워크이다. 현재는 TensorFlow 프로젝트의 일부로 관리되고 있다. Keras는 사용하기 쉬운 API를 제공하여 개발자들이 빠르게 딥러닝 모델을 구축하고 실험할 수 있도록 도와준다.
케라스는 딥 러닝 및 인공 신경망 모델을 개발하고 훈련하기 위한 고수준의 오픈 소스 딥 러닝 프레임워크이다. 케라스는 모델 생성, 컴파일, 훈련, 평가 및 예측을 위한 간편하고 직관적인 API를 제공하며, TensorFlow, Theano, CNTK 등과 같은 백엔드 딥 러닝 엔진과 연동된다. 현재는 TensorFlow 프로젝트의 일부로 포함되어 TensorFlow 2.x부터는 TensorFlow 공식 고수준 API로서 케라스를 사용한다.
2. 딥러닝 프로세스

딥러닝 프로세스
1) 데이터 준비
데이터를 로딩하여 준비한다.
import tensorflow as tf
import numpy as np
# MNIST 데이터 로드
mnist = tf.keras.datasets.mnist
# 데이터 준비
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
2) 데이터 전처리
이미지를 정규화하여 데이터를 전처리한다.
# 데이터 전처리 : 모델에 맞게 이미지를 정규화
train_images = train_images / train_images.max()
test_images = test_images / test_images.max()
3) 모델 생성
Sequential 클래스 사용해 모델을 생성한다. add 함수를 사용해 층(Layer)을 추가한다.
# 모델 생성
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))
model.add(tf.keras.layers.Dense(256, activation='relu'))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Dense(32, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
4) 모델 컴파일
옵티마이저와 손실함수 그리고 평가지표를 지정하여 모델을 컴파일 한다.
# 모델 컴파일 : 손실 함수, 옵티마이저, 평가 지표를 설정
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy', metrics=['accuracy'])
5) 모델 요약
정의한 모델의 Summay 정보를 표시한다. 모델의 구조와 노드 개수를 알 수 있다.
# 모델 요약
model.summary()
"""
summary(
line_length=None, positions=None, print_fn=None
)
"""
6) 모델 학습
데이터를 입력하고 반복 훈련할 에포크 수를 지정하여 모델을 학습한다.
# 모델 학습 : 훈련 데이터를 사용하여 모델을 학습
model.fit(train_images, train_labels, validation_data=(test_images, test_labels), epochs=10)
"""
고정된 수의 에폭(데이터셋 반복)에 대한 모델 교육
fit(
x=None, y=None, batch_size=None, epochs=1, verbose='auto',
callbacks=None, validation_split=0.0, validation_data=None, shuffle=True,
class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None,
validation_steps=None, validation_batch_size=None, validation_freq=1,
max_queue_size=10, workers=1, use_multiprocessing=False
)
"""
7) 모델 평가
테스트 데이터로 모델을 평가한다. 평가한 결과로 모델에 대한 손실 값과 메트릭 값을 반환한다.
# 모델 평가 : 테스트 데이터로 모델을 평가
test_loss, test_acc = model.evaluate(x_test, y_test)
print('test_loss =', test_loss)
print('test_loss =', test_loss)
print()
"""
테스트 모드의 모델에 대한 손실 값 및 메트릭 값을 반환한다.
evaluate(
x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None,
callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False,
return_dict=False, **kwargs
)
"""
8) 모델 예측
학습이 완료된 모델에 검증 데이터를 넣으면 예측 값을 반환한다.
# 모델 예측
predictions = model.predict(test_images)
print("test_labels =", test_labels[:10])
print("predictions = ", np.argmax(predictions[:10], axis=1))
"""
입력 샘플에 대한 출력 예측을 생성한다.
predict(
x, batch_size=None, verbose=0, steps=None, callbacks=None, max_queue_size=10,
workers=1, use_multiprocessing=False
)
"""
3. 전체 코드
케라스 API를 사용하여 딥러닝 프로세스에 따라 구현한 전체 코드이다.
import tensorflow as tf
import numpy as np
# MNIST 데이터 로드
mnist = tf.keras.datasets.mnist
# 데이터 준비
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# 데이터 전처리 : 모델에 맞게 이미지를 정규화
train_images = train_images / train_images.max()
test_images = test_images / test_images.max()
# 모델 생성
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))
model.add(tf.keras.layers.Dense(256, activation='relu'))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Dense(32, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
# 모델 컴파일 : 손실 함수, 옵티마이저, 평가 지표를 설정
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# 모델 요약
model.summary()
# 모델 학습 : 훈련 데이터를 사용하여 모델을 학습
model.fit(train_images, train_labels, validation_data=(test_images, test_labels), epochs=10)
# 모델 평가 : 테스트 데이터로 모델을 평가
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('test_loss =', test_loss)
print('test_acc =', test_acc)
print()
# 모델 예측
predictions = model.predict(test_images)
print("test_labels =", test_labels[:10])
print("predictions =", np.argmax(predictions[:10], axis=1))
실행 결과
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) (None, 784) 0
dense (Dense) (None, 256) 200960
dense_1 (Dense) (None, 128) 32896
dense_2 (Dense) (None, 64) 8256
dense_3 (Dense) (None, 32) 2080
dense_4 (Dense) (None, 10) 330
=================================================================
Total params: 244522 (955.16 KB)
Trainable params: 244522 (955.16 KB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________
Epoch 1/10
1875/1875 [=====] - 14s 7ms/step - loss: 0.2318 - accuracy: 0.9316 - val_loss: 0.1090 - val_accuracy: 0.9641
Epoch 2/10
1875/1875 [=====] - 13s 7ms/step - loss: 0.0957 - accuracy: 0.9712 - val_loss: 0.0910 - val_accuracy: 0.9703
Epoch 3/10
1875/1875 [=====] - 11s 6ms/step - loss: 0.0680 - accuracy: 0.9785 - val_loss: 0.0834 - val_accuracy: 0.9725
Epoch 4/10
1875/1875 [=====] - 11s 6ms/step - loss: 0.0552 - accuracy: 0.9831 - val_loss: 0.0860 - val_accuracy: 0.9752
Epoch 5/10
1875/1875 [=====] - 10s 5ms/step - loss: 0.0442 - accuracy: 0.9860 - val_loss: 0.0900 - val_accuracy: 0.9730
Epoch 6/10
1875/1875 [=====] - 11s 6ms/step - loss: 0.0365 - accuracy: 0.9882 - val_loss: 0.0987 - val_accuracy: 0.9755
Epoch 7/10
1875/1875 [=====] - 10s 5ms/step - loss: 0.0320 - accuracy: 0.9899 - val_loss: 0.0889 - val_accuracy: 0.9776
Epoch 8/10
1875/1875 [=====] - 10s 6ms/step - loss: 0.0265 - accuracy: 0.9912 - val_loss: 0.0826 - val_accuracy: 0.9806
Epoch 9/10
1875/1875 [=====] - 9s 5ms/step - loss: 0.0237 - accuracy: 0.9926 - val_loss: 0.0988 - val_accuracy: 0.9753
Epoch 10/10
1875/1875 [=====] - 8s 4ms/step - loss: 0.0236 - accuracy: 0.9925 - val_loss: 0.0884 - val_accuracy: 0.9786
313/313 [=====] - 1s 2ms/step - loss: 0.0884 - accuracy: 0.9786
test_loss = 0.08842431008815765
test_acc = 0.978600025177002
313/313 [=====] - 1s 2ms/step
test_labels = [7 2 1 0 4 1 4 9 5 9]
predictions = [7 2 1 0 4 1 4 9 5 9]
4. 참조 URL
Keras documentation: Code examples
keras.io
https://www.tensorflow.org/api_docs/python/tf/keras/Model
tf.keras.Model | TensorFlow v2.16.1
A model grouping layers into an object with training/inference features.
www.tensorflow.org

'✨ 딥러닝·머신러닝' 카테고리의 다른 글
| 케라스 데이터셋 - 케라스(Keras)에서 제공하는 데이터셋 (0) | 2026.06.13 |
|---|---|
| 합성곱 신경망(CNN) - 합성곱 신경망을 구현해 보자 (CIFAR-10) (0) | 2026.06.10 |
| 인공지능 입문 - 인공지능, 머신러닝, 딥러닝의 관계 (0) | 2026.06.06 |
| MNIST 손글씨 - 숫자 이미지를 모델로 학습하여 인식 (0) | 2026.05.20 |
| TensorFlow - 텐서플로를 설치하고 기본 예제 실행 (0) | 2026.05.17 |
댓글