このページは Cloud Translation API によって翻訳されました。
Switch to English

KerasモデルをTensorFlow.jsにインポートする

Kerasモデル(通常はPython APIを介して作成されます)は、いくつかの形式のいずれかで保存できます 。 「モデル全体」の形式は、TensorFlow.jsレイヤー形式に変換できます。これは、推論またはさらなるトレーニングのためにTensorFlow.jsに直接ロードできます。

ターゲットのTensorFlow.jsレイヤー形式は、 model.jsonファイルとバイナリ形式のシャーディングされた重みファイルのセットを含むディレクトリです。 model.jsonファイルには、モデルトポロジ(別名「アーキテクチャ」または「グラフ」:レイヤーの説明とレイヤーの接続方法)とウェイトファイルのマニフェストの両方が含まれています。

必要条件

変換手順にはPython環境が必要です。 pipenvまたはvirtualenvを使用して、隔離されたものを保持することもできます。コンバーターをインストールするには、 pip install tensorflowjs使用します。

KerasモデルをTensorFlow.jsにインポートするプロセスは2段階です。まず、既存のKerasモデルをTF.jsレイヤー形式に変換し、それをTensorFlow.jsに読み込みます。

ステップ1.既存のKerasモデルをTF.jsレイヤー形式に変換する

model.save(filepath)モデルは通常、 model.save(filepath)を介して保存されます。これにより、モデルトポロジと重みの両方を含む単一のHDF5(.h5)ファイルが生成されます。このようなファイルをTF.jsレイヤー形式に変換するには、次のコマンドを実行しますpath/to/my_model.h5はソースのKeras .h5ファイルで、 path/to/tfjs_target_dirはTF.jsファイルのターゲット出力ディレクトリです。

# bash

tensorflowjs_converter --input_format keras \
                       path/to/my_model.h5 \
                       path/to/tfjs_target_dir

別の方法:Python APIを使用してTF.jsレイヤー形式に直接エクスポートする

PythonにKerasモデルがある場合は、次のようにTensorFlow.jsレイヤー形式に直接エクスポートできます。

# Python

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)

ステップ2:モデルをTensorFlow.jsに読み込む

ウェブサーバーを使用して、ステップ1で生成した変換済みのモデルファイルを提供します。JavaScriptでファイルをフェッチできるようにするために、 クロスオリジンリソースシェアリング(CORS)許可するようにサーバーを構成する必要がある場合があります。

次に、model.jsonファイルへのURLを指定して、モデルをTensorFlow.jsに読み込みます。

// JavaScript

import * as tf from '@tensorflow/tfjs';

const model = await tf.loadLayersModel('https://foo.bar/tfjs_artifacts/model.json');

これで、モデルは推論、評価、または再トレーニングの準備ができました。たとえば、読み込まれたモデルはすぐに予測に使用できます。

// JavaScript

const example = tf.fromPixels(webcamElement);  // for example
const prediction = model.predict(example);

TensorFlow.jsの例の多くは、Google Cloud Storageで変換およびホストされた事前トレーニング済みモデルを使用して、このアプローチを採用しています。

model.jsonファイル名を使用してモデル全体を参照することに注意してください。 loadModel(...) model.jsonフェッチし、追加のHTTP(S)リクエストを作成して、 model.jsonウェイトマニフェストで参照されている分割ウェイトファイルを取得します。このアプローチでは、 model.jsonとウェイトシャードがそれぞれ通常のキャッシュファイルサイズの制限よりも小さいため、これらのファイルすべてをブラウザー(およびおそらくインターネット上の追加のキャッシュサーバー)にキャッシュできます。したがって、モデルはその後の状況でより速くロードされる可能性があります。

サポートされている機能

TensorFlow.jsレイヤーは現在、標準のKeras構造を使用するKerasモデルのみをサポートしています。サポートされていないopsまたはレイヤー(カスタムレイヤー、Lambdaレイヤー、カスタム損失、カスタム指標など)を使用するモデルは、JavaScriptに確実に変換できないPythonコードに依存しているため、自動的にインポートできません。