Keras의 딥 러닝 모델을 Watson Machine Learning으로 웹 서비스화

소개



Watson Studio에서 scikit-learn 기계 학습 모델 웹 서비스 문서에서 설명한 것처럼 IBM의 클라우드 서비스 인 Watson Studio와 Watson Machine Learning을 결합하여 sckit-learn의 기계 학습 모델을 쉽게 웹 서비스 할 수 있습니다.
이 기사는 Keras 버전입니다.
(scikit-learn은 정말 쉽게 웹 서비스 화할 수 있었지만, 그것에 비해 모델 등록 절차에 약간의 요령이 있습니다)

[2020-04-25] 설치 절차 수정

전제



무료로 모든 것을 시도 할 수 있습니다! Watson Studio 설정 가이드
IBM Cloud에 계정을 등록하고 Watson Studio 프로젝트도 작성했습니다.
맨 뒤의 옵션 설정도 필요합니다.
(정확히 말하면, Watson Machine Learning은 필요하고 Spark는 불필요)

절차



등록까지 구체적 절차는 다음과 같습니다.

모델 작성 및 학습



모델은 뭐든지 좋지만 간단하게하기 위해 숨겨진 레이어 2 층의 전체 결합 형 신경망으로했습니다. 보통의 Keras의 모델이므로 해설은 생략합니다.
우연히 Functional API를 사용하고 있지만 Sequential에서도 괜찮을 것입니다.
# データ準備

# 変数定義

# D: 入力ノード数
D = 784

# H: 隠れ層のノード数
H = 128

# 分類クラス数
num_classes = 10

# Kerasの関数でデータの読み込み
from keras.datasets import mnist
(x_train_org, y_train), (x_test_org, y_test) = mnist.load_data()

# 入力データの加工 (次元を1次元に)
x_train = x_train_org.reshape(-1, D) / 255.0
x_test = x_test_org.reshape((-1, D)) / 255.0

# 教師データの加工 (One Hot Vectorに)
from keras.utils import np_utils
y_train_ohe = np_utils.to_categorical(y_train, num_classes)
y_test_ohe = np_utils.to_categorical(y_test, num_classes)

from keras import optimizers
# モデルの定義

# 必要ライブラリのロード
from keras.layers import Dense
from keras.layers import Input
from keras.models import Model

# モデルの定義
inputs = Input(shape=(D,))
# 隠れ層1の定義
h1 = Dense(H, activation='relu')(inputs)
# 隠れ層2の定義
h2 = Dense(H, activation='relu')(h1)
# 出力層
predictions = Dense(num_classes, activation='softmax')(h2)
# モデル
model = Model(inputs=inputs, outputs=predictions)
# モデルのコンパイル
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss = 'categorical_crossentropy',
              optimizer = sgd,
              metrics=['accuracy'])

# 学習

# 学習の単位
batch_size = 512

# 繰り返し回数
nb_epoch = 20

# モデルの学習
history1 = model.fit(
    x_train, 
    y_train_ohe,
    batch_size = batch_size, 
    epochs = nb_epoch,
    verbose = 1, 
    validation_data = (x_test, y_test_ohe))

Watson ML 관리 클라이언트 생성



여기부터는 Watson Studio/Watson Machine Learing 관련 이야기입니다.

먼저 다음 코드로 Watson Machine Learing 관리 클라이언트를 생성합니다.
wml_credentials에서 구성 정보를 얻는 방법에 대해서는 위에서 설명한 기사 Watson Studio에서 scikit-learn 기계 학습 모델 웹 서비스를 참조하십시오.
wml_credentials={
  "url": "https://ibm-watson-ml.mybluemix.net",
  "username": "***",
  "password": "***",
  "instance_id": "***"
}

from watson_machine_learning_client import WatsonMachineLearningAPIClient
client = WatsonMachineLearningAPIClient(wml_credentials)

업로드용 압축 파일 준비



Keras 모델을 리포지토리에 등록하려면 일단 모델을 h5 형식의 파일로 떨어뜨리고 그 파일을 gz 압축해야 합니다.
(API 문서에서 읽기 어려운 요령 부분)
구체적인 코드로서는 이하의 형태가 됩니다.
h5file = 'mnist-keras.h5'
gzfile = 'mnist-keras.tar.gz'

model.save(h5file)
import tarfile
 with tarfile.open(gzfile, 'w:gz') as tf:
    tf.add(h5file)

모델 저장



이제 필요한 준비가 되었으므로 모델을 저장할 수 있습니다. 다만, scikit-learn 때와 달리, 메타 정보를 몇개 설정해야 합니다.
(API 문서에서 읽기 어려운 팁 2)

구체적인 코드는 다음과 같습니다.
metadata = {
        client.repository.ModelMetaNames.NAME: 'Keras MNIST Test',
        client.repository.ModelMetaNames.FRAMEWORK_NAME: 'tensorflow',
        client.repository.ModelMetaNames.FRAMEWORK_VERSION: '1.5',
        client.repository.ModelMetaNames.RUNTIME_NAME: 'python',
        client.repository.ModelMetaNames.RUNTIME_VERSION: '3.5',
        client.repository.ModelMetaNames.FRAMEWORK_LIBRARIES: [{'name':'keras', 'version': '2.1.3'}]
}
published_model = client.repository.store_model(model=gzfile, meta_props=metadata)

마지막 store_model 함수 호출이 성공적으로 완료되면 아래 그림과 같이 Watson Studio에서 관리할 수 있는 모델입니다.
그 후에는 Watson Studio에서 scikit-learn 기계 학습 모델 웹 서비스과 똑같은 순서로 웹 서비스화나 웹 서비스의 테스트, 웹 서비스 호출의 앱 개발이 가능합니다. 자세한 내용은 위의 기사를 참고하십시오.

좋은 웹페이지 즐겨찾기