Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

TensorFlow를 활용해 Python으로 딥러닝 모델을 학습시키는 방법

개요

TensorFlow에서는 fit 메서드를 사용해 모델을 손쉽게 훈련할 수 있습니다. 이 메서드 호출 시 에포크(epoch, 전체 데이터셋을 반복 학습하는 횟수)와 훈련 데이터, 그리고 검증용 데이터를 함께 지정합니다.

아래 코드는 Google Colaboratory 환경에서 실행한 결과입니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있는 무료 클라우드 서비스로, 별도의 환경 설정이 필요 없으며 GPU(그래픽 처리 장치)까지 무료로 사용할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.

print("모델 학습을 시작합니다")
epochs = 12
history = model.fit(
    train_ds,
    validation_data=val_ds,
    epochs=epochs
)

코드 출처: https://www.tensorflow.org/tutorials/images/classification

출력 결과

모델 학습을 시작합니다
Epoch 1/12
92/92 [==============================] - 94s 1s/step - loss: 1.6007 - accuracy: 0.3411 - val_loss: 1.0708 - val_accuracy: 0.5627
Epoch 2/12
92/92 [==============================] - 92s 995ms/step - loss: 1.0138 - accuracy: 0.5843 - val_loss: 0.9451 - val_accuracy: 0.6458
Epoch 3/12
92/92 [==============================] - 91s 990ms/step - loss: 0.8382 - accuracy: 0.6767 - val_loss: 0.9054 - val_accuracy: 0.6471
Epoch 4/12
92/92 [==============================] - 90s 984ms/step - loss: 0.6362 - accuracy: 0.7580 - val_loss: 0.8872 - val_accuracy: 0.6540
Epoch 5/12
92/92 [==============================] - 94s 1s/step - loss: 0.4125 - accuracy: 0.8572 - val_loss: 0.9114 - val_accuracy: 0.6676
Epoch 6/12
92/92 [==============================] - 91s 988ms/step - loss: 0.2460 - accuracy: 0.9207 - val_loss: 1.0891 - val_accuracy: 0.6757
Epoch 7/12
92/92 [==============================] - 91s 988ms/step - loss: 0.1721 - accuracy: 0.9532 - val_loss: 1.2619 - val_accuracy: 0.6635
Epoch 8/12
92/92 [==============================] - 90s 983ms/step - loss: 0.0658 - accuracy: 0.9823 - val_loss: 1.4119 - val_accuracy: 0.6703
Epoch 9/12
92/92 [==============================] - 90s 983ms/step - loss: 0.0556 - accuracy: 0.9865 - val_loss: 1.6113 - val_accuracy: 0.6090
Epoch 10/12
92/92 [==============================] - 91s 992ms/step - loss: 0.0805 - accuracy: 0.9729 - val_loss: 1.9744 - val_accuracy: 0.6390
Epoch 11/12
92/92 [==============================] - 90s 979ms/step - loss: 0.0545 - accuracy: 0.9838 - val_loss: 1.9303 - val_accuracy: 0.6662
Epoch 12/12
92/92 [==============================] - 96s 1s/step - loss: 0.0176 - accuracy: 0.9961 - val_loss: 1.8234 - val_accuracy: 0.6540

코드 설명

  • 모델은 주어진 훈련 데이터에 맞춰 학습(fit)됩니다.
  • 학습 과정은 model.fit() 메서드를 통해 수행됩니다.
  • train_ds는 훈련에 사용되는 데이터셋이며, val_ds는 각 에포크마다 모델 성능을 평가하는 검증 데이터셋입니다.
  • epochs=12로 설정했기 때문에 전체 데이터셋을 총 12번 반복하여 학습합니다.
  • 학습 결과는 history 객체에 저장되므로, 나중에 정확도와 손실 곡선을 시각화하는 데 활용할 수 있습니다.

결과 해석

훈련이 진행됨에 따라 loss(손실)는 꾸준히 감소하고 accuracy(정확도)는 상승하는 것을 확인할 수 있습니다. 12번째 에포크에서 훈련 정확도는 약 99.6%에 도달했습니다.

다만 5번째 에포크 이후 val_loss(검증 손실)가 다시 상승하는 추세를 보이는데, 이는 모델이 훈련 데이터에 과적합(overfitting)되고 있다는 신호입니다. 이런 경우 조기 종료(Early Stopping), 드롭아웃(Dropout), 데이터 증강(Data Augmentation)과 같은 기법을 적용하면 일반화 성능을 개선할 수 있습니다.