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

TensorFlow로 손실 함수·옵티마이저 정의하기: IMDB 데이터셋 모델 훈련 및 평가 방법

TensorFlow 소개

TensorFlow는 구글(Google)이 제공하는 대표적인 머신러닝 프레임워크입니다. 오픈소스로 공개되어 있으며, Python과 함께 사용해 알고리즘 구현, 딥러닝 애플리케이션 개발 등 다양한 작업을 수행할 수 있습니다. 학술 연구부터 실제 서비스 운영(프로덕션) 환경까지 폭넓게 활용되고 있습니다.

'tensorflow' 패키지는 Windows 환경에서 아래 명령어 한 줄로 간단히 설치할 수 있습니다.

pip install tensorflow

IMDB 데이터셋이란?

'IMDB' 데이터셋은 5만 건이 넘는 영화 리뷰를 담고 있는 데이터셋으로, 자연어 처리(Natural Language Processing) 관련 작업에서 널리 사용됩니다. 각 리뷰는 긍정 또는 부정으로 레이블링되어 있어 감성 분석(Sentiment Analysis) 모델을 학습시키기에 적합합니다.

본 예제는 Google Colaboratory(Colab) 환경에서 실행됩니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 설정 없이 무료로 GPU(그래픽 처리 장치)를 사용할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.

손실 함수·옵티마이저 정의 및 모델 훈련 코드

다음은 손실 함수(loss function)와 옵티마이저(optimizer)를 정의하고, 모델을 훈련한 뒤 IMDB 데이터셋에서 성능을 평가하는 코드 예제입니다.

model.compile(loss=losses.BinaryCrossentropy(from_logits=True),
              optimizer='adam',
              metrics=tf.metrics.BinaryAccuracy(threshold=0.0))
epochs = 10
history = model.fit(
    train_ds,
    validation_data=val_ds,
    epochs=epochs)
loss, accuracy = model.evaluate(test_ds)

print("Loss is : ", loss)
print("Accuracy is : ", accuracy)

코드 출처 − https://www.tensorflow.org/tutorials/keras/text_classification

실행 결과

Epoch 1/10
625/625 [==============================] - 12s 19ms/step - loss: 0.6818 - binary_accuracy: 0.6130 - val_loss: 0.6135 - val_binary_accuracy: 0.7750
Epoch 2/10
625/625 [==============================] - 4s 7ms/step - loss: 0.5785 - binary_accuracy: 0.7853 - val_loss: 0.4971 - val_binary_accuracy: 0.8230
Epoch 3/10
625/625 [==============================] - 4s 7ms/step - loss: 0.4651 - binary_accuracy: 0.8372 - val_loss: 0.4193 - val_binary_accuracy: 0.8470
Epoch 4/10
625/625 [==============================] - 4s 7ms/step - loss: 0.3901 - binary_accuracy: 0.8635 - val_loss: 0.3732 - val_binary_accuracy: 0.8612
Epoch 5/10
625/625 [==============================] - 4s 7ms/step - loss: 0.3435 - binary_accuracy: 0.8771 - val_loss: 0.3444 - val_binary_accuracy: 0.8688
Epoch 6/10
625/625 [==============================] - 4s 7ms/step - loss: 0.3106 - binary_accuracy: 0.8877 - val_loss: 0.3255 - val_binary_accuracy: 0.8730
Epoch 7/10
625/625 [==============================] - 5s 7ms/step - loss: 0.2855 - binary_accuracy: 0.8970 - val_loss: 0.3119 - val_binary_accuracy: 0.8732
Epoch 8/10
625/625 [==============================] - 5s 7ms/step - loss: 0.2652 - binary_accuracy: 0.9048 - val_loss: 0.3027 - val_binary_accuracy: 0.8772
Epoch 9/10
625/625 [==============================] - 5s 7ms/step - loss: 0.2481 - binary_accuracy: 0.9125 - val_loss: 0.2959 - val_binary_accuracy: 0.8782
Epoch 10/10
625/625 [==============================] - 5s 7ms/step - loss: 0.2328 - binary_accuracy: 0.9161 - val_loss: 0.2913 - val_binary_accuracy: 0.8792
782/782 [==============================] - 10s 12ms/step - loss: 0.3099 - binary_accuracy: 0.8741
Loss is : 0.3099007308483124
Accuracy is : 0.8741199970245361

코드 설명

  • 모델 구축이 완료되면 'compile' 함수를 호출하여 모델을 컴파일합니다. 이때 손실 함수로는 이진 교차 엔트로피(BinaryCrossentropy), 옵티마이저로는 'adam', 평가 지표로는 BinaryAccuracy가 설정됩니다.

  • 모델 훈련 반복 횟수(epoch)는 10회로 지정되었습니다.

  • 'fit' 함수는 앞서 구축한 모델에 훈련 데이터(train_ds)를 학습시키는 역할을 하며, 검증 데이터(val_ds)를 함께 전달해 매 에포크마다 검증 손실과 검증 정확도를 확인할 수 있습니다.

  • 'evaluate' 함수는 훈련이 끝난 모델을 테스트 데이터셋(test_ds)에 적용하여 최종 손실(loss)과 정확도(accuracy)를 계산합니다.

  • 계산된 손실 값과 정확도 값은 print 문을 통해 콘솔에 출력됩니다.

실행 결과를 보면, 에포크가 진행될수록 훈련 손실은 꾸준히 감소하고 정확도는 상승하며, 최종적으로 테스트 데이터셋에서 약 87.4%의 정확도를 달성한 것을 확인할 수 있습니다. 이는 모델이 영화 리뷰의 긍정·부정 여부를 효과적으로 분류했음을 의미합니다.