[딥러닝] Keras 모델을 TensorFlow.js로 가져오기

지현·2022년 6월 10일
1

딥러닝 모델을 웹 서비스에서 제공하고 싶어서 여러가지 자료를 찾아보았다.

현재 딥러닝 모델은 Python 기반이고 진행하는 프로젝트의 서버는 Java 기반(스프링부트)이다.

따라서 딥러닝을 웹에서 제공하기 위해서는
자바에서 직접 파이썬 코드를 호출하여 사용하거나(1),
모델 서버를 하나 더 만들어서 api 통신을 하는 방법(2) 두가지 방법이 있다고 생각했다.
(당시 참고했던 글)

하지만 새로운 방법을 같이 진행하고 있는 미서님이 찾았고(💜) 오늘은 그 방법인 TensorFlow.js를 이용하여 딥러닝 모델을 웹 서비스에서 사용해보려고 한다!

TensorFlow 공식 문서 (Keras 모델을 TensorFlow.js로 가져오기)를 참고하여 진행해보았다.


TensorFlow.js 라이브러리 설치

  • TensorFlow For JavaScript 튜토리얼

  • 브라우저
    • 스크립트 태그를 통한 사용법
      기본 HTML 파일에 다음 스크립트 태그를 추가한다.
    • <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.0.0/dist/tf.min.js"></script>

  • npm에서 설치
    • npm install @tensorflow/tfjs
      또는
    • yarn add @tensorflow/tfjs

  • install 후 다음과 같은 방법으로 사용 가능
    • var tf = require('@tensorflow/tfjs');

기존 Keras 모델을 TF.js Layer 형식으로 변환하기

  • Keras 모델은 일반적으로 model.save(filepath)를 통해 저장되며 모델 토폴로지와 가중치를 모두 포함하는 단일 HDF5(.h5) 파일을 생성한다.
    해당 파일을 TF.js Layer 형식으로 변환하려면 다음 명령을 실행한다.
    여기서 path/to/my_model.h5는 소스 Keras.h5 파일이고 path/to/tfjs_target_dir은 TF.js 파일의 대상 출력 디렉터리다.
tensorflowjs_converter --input_format keras path/to/my_model.h5 path/to/tfjs_target_dir
  • (+) Python API를 사용하여 TF.js Layer 형식으로 직접 내보내기
import tensorflowjs as tfjs

def train(...):
    model = keras.models.Sequential()   # for example
    ...
    model.compile(...)
    model.fit(...)
    tfjs.converters.save_keras_model(model, tfjs_target_dir)

TensorFlow.js에 모델 로드하기

  • 아래 코드 처럼 model.json을 TensorFlow.js에 불러와서 모델을 사용할 수 있다.
import * as tf from '@tensorflow/tfjs';

const model = await tf.loadLayersModel('./{경로}/model.json');

주의 사항

  • TensorFlow.js Layer는 현재 표준 Keras 구성을 사용하는 Keras 모델만 지원한다.
    지원되지 않는 연산 또는 레이어(예: 사용자 정의 레이어, 람다 레이어, 사용자 정의 손실 또는 사용자 정의 메트릭)를 사용하는 모델은 JavaScript로 안정적으로 변환할 수 없는 Python 코드에 의존하기 때문에 자동으로 가져올 수 없다.

Trouble Shooting

1. 기존 Keras 모델을 TF.js Layer 형식으로 변환하는 중 다음과 같은 오류가 발생했다.

tensorflowjs_converter : 'tensorflowjs_converter' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다.
이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오.

2. ValueError

ValueError: Nonexistent path to HDF5 file: D:\VSCodeProjects\video_3_LSTM_1_1024.h5
  • 해결 방법
    • 절대 경로가 아닌 상대 경로로 경로를 지정해주니 오류가 생기지 않고 변환을 성공하였다.

참고
Tensorflow.js로 백엔드 없이 딥러닝 모델 이용하기

profile
주절주절 TMI를 쓰는 걸 좋아하는 개발 블로그 ✒️🥔

0개의 댓글