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

TensorFlow를 활용해 Python으로 빌드한 모델을 내보내는 방법

TensorFlow는 구글(Google)에서 제공하는 머신러닝 프레임워크입니다. 오픈소스 기반으로 Python과 함께 사용되어 알고리즘 구현, 딥러닝 애플리케이션 개발 등 다양한 용도로 활용되며, 연구 환경과 실제 프로덕션 환경 모두에서 널리 쓰이고 있습니다.

TensorFlow에는 복잡한 수학적 연산을 신속하게 처리할 수 있는 최적화 기법이 내장되어 있습니다. 이는 NumPy와 다차원 배열을 기반으로 동작하기 때문인데, 이러한 다차원 배열을 흔히 '텐서(tensor)'라고 부릅니다.

이 프레임워크는 심층 신경망(deep neural network) 작업을 지원하며, 뛰어난 확장성을 갖추고 있고 다양한 인기 데이터셋을 함께 제공합니다. GPU 연산을 활용하고 리소스 관리를 자동화하며, 방대한 머신러닝 라이브러리를 포함하고 있어 문서화와 커뮤니티 지원도 잘 되어 있습니다. TensorFlow를 사용하면 딥러닝 모델을 실행하고 학습시킬 수 있으며, 데이터셋의 특성을 예측하는 애플리케이션까지 손쉽게 만들 수 있습니다.

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

pip install tensorflow

텐서(Tensor)는 TensorFlow에서 사용되는 핵심 데이터 구조입니다. 텐서는 데이터 플로우 다이어그램에서 노드 사이의 엣지(edge)를 연결하는 역할을 하며, 이 다이어그램을 '데이터 플로우 그래프(Data flow graph)'라고 합니다. 텐서란 결국 다차원 배열 또는 리스트를 의미합니다.

아래 코드는 Google Colaboratory 환경에서 실행됩니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 설정이 필요 없고 GPU에 무료로 접근할 수 있다는 큰 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.

예제 코드

다음은 학습된 모델을 내보내고 평가하는 코드 스니펫입니다.

print("모델을 내보내는 중입니다")
export_model = tf.keras.Sequential(
    [binary_vectorize_layer, binary_model,
    layers.Activation('sigmoid')])
print("모델을 컴파일하는 중입니다")
export_model.compile(
    loss=losses.SparseCategoricalCrossentropy(from_logits=False),
    optimizer='adam',
    metrics=['accuracy'])
print("원시 문자열을 입력받는 `raw_test_ds`로 모델을 평가합니다")
loss, accuracy = export_model.evaluate(raw_test_ds)
print("모델의 정확도는 : {:2.2%}".format(binary_accuracy))

코드 출처 − https://www.tensorflow.org/tutorials/load_data/text

실행 결과

모델을 내보내는 중입니다
모델을 컴파일하는 중입니다
원시 문자열을 입력받는 `raw_test_ds`로 모델을 평가합니다
250/250 [==============================] - 4s 13ms/step - loss: 0.5296 - accuracy: 0.8078
모델의 정확도는 : 81.10%

코드 설명

  • 'TextVectorization' 레이어는 데이터셋이 모델에 입력되기 전에 전처리 단계로 적용됩니다.

  • 만약 모델이 원시 문자열(raw string)을 직접 처리해야 하는 상황이라면, 'TextVectorization' 레이어를 모델 내부에 포함시키는 방식을 사용할 수 있습니다.

  • 이를 구현하기 위해, 학습 과정에서 사용된 가중치를 그대로 활용하여 새로운 Sequential 모델을 생성합니다. 이렇게 만들어진 export_model은 벡터화 레이어부터 활성화 함수까지 전체 파이프라인을 하나로 묶어, 배포 후에도 원시 텍스트 입력을 바로 처리할 수 있습니다.

  • 마지막으로 evaluate() 메서드를 통해 테스트 데이터셋에 대한 손실(loss)과 정확도(accuracy)를 확인함으로써, 내보낸 모델이 올바르게 동작하는지 검증할 수 있습니다.