개요
TensorFlow(텐서플로우)는 구글이 제공하는 머신러닝 프레임워크입니다. 오픈소스 기반으로 Python과 함께 사용되어 다양한 알고리즘, 딥러닝 애플리케이션 등을 구현할 수 있으며, 연구 목적과 상용 환경 모두에서 널리 활용됩니다.
Windows 환경에서는 아래 명령어 한 줄로 'tensorflow' 패키지를 설치할 수 있습니다.
pip install tensorflow
텐서(Tensor)는 TensorFlow에서 사용하는 핵심 데이터 구조입니다. 데이터 흐름 그래프(Data Flow Graph)의 간(edge)을 연결하는 역할을 하며, 본질적으로 다차원 배열 또는 리스트라고 할 수 있습니다.
Fashion MNIST 데이터셋이란?
'Fashion MNIST' 데이터셋은 다양한 종류의 의류 이미지를 담고 있는 데이터셋입니다. 10개 서로 다른 카테고리에 속하는 7만 장 이상의 회색조(grayscale) 의류 이미지로 구성되어 있으며, 해상도는 28 x 28 픽셀로 낮은 편입니다.
이 글의 코드는 구글 코랩(Google Colaboratory)에서 실행했습니다. Colab은 브라우저에서 바로 파이썬 코드를 실행할 수 있게 해주며, 별도의 설정 없이 GPU에 무료로 접근할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.
예제 코드
아래 코드는 준비된 모델을 학습 데이터에 맞춰 훈련한 뒤, 테스트 데이터로 정확도를 평가하는 과정을 보여줍니다.
print("모델을 학습 데이터에 피팅합니다")
model.fit(train_images, train_labels, epochs=15)
print("정확도를 계산합니다")
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('\n테스트 정확도 :', test_acc)코드 출처 - https://www.tensorflow.org/tutorials/keras/classification
실행 결과
모델을 학습 데이터에 피팅합니다 Epoch 1/15 1875/1875 [==============================] - 4s 2ms/step - loss: 0.6337 - accuracy: 0.7799 Epoch 2/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.3806 - accuracy: 0.8622 Epoch 3/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.3469 - accuracy: 0.8738 Epoch 4/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.3131 - accuracy: 0.8853 Epoch 5/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.2962 - accuracy: 0.8918 Epoch 6/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.2875 - accuracy: 0.8935 Epoch 7/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.2705 - accuracy: 0.8998 Epoch 8/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.2569 - accuracy: 0.9023 Epoch 9/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.2465 - accuracy: 0.9060 Epoch 10/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.2440 - accuracy: 0.9088 Epoch 11/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.2300 - accuracy: 0.9143 Epoch 12/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.2255 - accuracy: 0.9152 Epoch 13/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.2114 - accuracy: 0.9203 Epoch 14/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.2101 - accuracy: 0.9211 Epoch 15/15 1875/1875 [==============================] - 3s 2ms/step - loss: 0.2057 - accuracy: 0.9224 정확도를 계산합니다 313/313 - 0s - loss: 0.3528 - accuracy: 0.8806 테스트 정확도 : 0.8805999755859375
코드 설명
먼저 학습 데이터를 모델에 입력하여 학습을 진행합니다. 'train_images'와 'train_labels'는 입력 데이터가 담긴 배열입니다.
학습 과정에서 모델은 이미지와 해당 라벨(label) 사이의 매핑 관계를 익히게 됩니다.
'test_images'에는 테스트용 데이터가 저장되어 있습니다.
테스트 데이터셋으로 예측을 수행하면, 그 결과가 실제 라벨과 비교되어 성능이 평가됩니다.
'model.fit' 메서드를 호출하면 모델이 학습 데이터셋에 맞춰 훈련됩니다.
'model.evaluate' 함수는 학습 과정에서 얻어진 정확도와 손실(loss) 값을 반환합니다.
결과 분석
실행 결과를 보면 15번의 에포크(epoch) 동안 손실은 0.6337에서 0.2057까지 꾸준히 감소했고, 학습 정확도는 77.99%에서 92.24%까지 상승했습니다. 최종적으로 테스트 데이터셋에서 측정된 정확도는 약 88.06%로, 학습 정확도와 다소 차이가 있는데 이는 모델이 학습 데이터에 다소 과적합(overfitting)되었음을 시사합니다. 드롭아웃(Dropout), 조기 종료(Early Stopping) 같은 기법을 적용하면 일반화 성능을 더욱 개선할 수 있습니다.