日付を保存! Google I / Oが5月18日から20日に戻ってきます今すぐ登録
このページは Cloud Translation API によって翻訳されました。
Switch to English

モデルの保存と読み込み

TensorFlow.jsは、 Layers APIで作成されたモデル、または既存のTensorFlowモデルから変換されたモデルを保存およびロードするための機能を提供します。これらは、自分でトレーニングしたモデルでも、他の人がトレーニングしたモデルでもかまいません。 Layers APIを使用する主な利点は、それを使用して作成されたモデルがシリアル化可能であるということです。これは、このチュートリアルで説明する内容です。

このチュートリアルでは、TensorFlow.jsモデル(JSONファイルで識別可能)の保存と読み込みに焦点を当てます。 TensorFlowPythonモデルをインポートすることもできます。これらのモデルのロードについては、次の2つのチュートリアルで説明しています。

tf.Modelを保存します

tf.Modeltf.Sequentialどちらも、モデルのトポロジ重みを保存できる関数model.saveを提供します。

  • トポロジ:これは、モデルのアーキテクチャ(つまり、モデルが使用する操作)を説明するファイルです。これには、外部に保存されているモデルの重みへの参照が含まれています。

  • 重み:これらは、特定のモデルの重みを効率的な形式で格納するバイナリファイルです。これらは通常、トポロジと同じフォルダに保存されます。

モデルを保存するためのコードがどのように見えるかを見てみましょう

const saveResult = await model.save('localstorage://my-model-1');

注意すべきいくつかの事柄:

  • saveメソッドは、スキームで始まるURLのような文字列引数を取ります。これは、モデルを保存しようとしている宛先のタイプを示しています。上記の例では、スキームはlocalstorage://
  • スキームの後にパスが続きます。上記の例では、パスはmy-model-1です。
  • saveメソッドは非同期です。
  • model.saveの戻り値は、モデルのトポロジのバイトサイズや重みなどの情報を運ぶJSONオブジェクトです。
  • モデルの保存に使用される環境は、モデルをロードできる環境に影響を与えません。 node.jsにモデルを保存しても、ブラウザーへのロードが妨げられることはありません。

以下では、利用可能なさまざまなスキームを検討します。

ローカルストレージ(ブラウザのみ)

スキーム: localstorage://

await model.save('localstorage://my-model');

これにより、モデルがmy-modelという名前でブラウザのローカルストレージに保存されます。これは更新の間も持続しますが、スペースが問題になる場合は、ユーザーまたはブラウザ自体がローカルストレージをクリアできます。各ブラウザは、特定のドメインのローカルストレージに保存できるデータの量にも独自の制限を設定します。

IndexedDB(ブラウザのみ)

スキーム: indexeddb://

await model.save('indexeddb://my-model');

これにより、モデルがブラウザのIndexedDBストレージに保存されます。ローカルストレージと同様に、更新間も保持され、保存されるオブジェクトのサイズに大きな制限がある傾向があります。

ファイルのダウンロード(ブラウザのみ)

スキーム: downloads://

await model.save('downloads://my-model');

これにより、ブラウザはモデルファイルをユーザーのマシンにダウンロードします。 2つのファイルが作成されます。

  1. [my-model].jsonという名前のテキストJSONファイル。トポロジと、以下で説明する重みファイルへの参照が含まれています。
  2. [my-model].weights.binという名前の重み値を保持するバイナリファイル。

[my-model]という名前を変更して、別の名前のファイルを取得できます。

.jsonファイルは相対パスを使用して.binを指しているため、2つのファイルは同じフォルダーにある必要があります。

HTTP(S)リクエスト

スキーム: http://またはhttps://

await model.save('http://model-server.domain/upload')

これにより、モデルをリモートサーバーに保存するためのWebリクエストが作成されます。リクエストを確実に処理できるように、そのリモートサーバーを制御する必要があります。

モデルは、 POSTリクエストを介して指定されたHTTPサーバーに送信されます。 POSTの本文はmultipart/form-data形式であり、2つのファイルで構成されています

  1. model.jsonという名前のテキストJSONファイル。トポロジと、以下で説明する重みファイルへの参照が含まれています。
  2. model.weights.binという名前の重み値を保持するバイナリファイル。

2つのファイルの名前は、常に上記で指定したとおりになることに注意してください(名前は関数に組み込まれています)。このAPIドキュメントには、 saveから発信されたリクエストを処理するためにflaskWebフレームワークを使用する方法を示すPythonコードスニペットが含まれていsave

多くの場合、HTTPサーバーにさらに引数または要求ヘッダーを渡す必要があります(たとえば、認証のため、またはモデルを保存するフォルダーを指定する場合)。 tf.io.browserHTTPRequest URL文字列引数を置き換えるsaveにより、 saveからリクエストのこれらの側面をきめ細かく制御できます。このAPIは、HTTPリクエストの制御においてより高い柔軟性を提供します。

例えば:

await model.save(tf.io.browserHTTPRequest(
    'http://model-server.domain/upload',
    {method: 'PUT', headers: {'header_key_1': 'header_value_1'} }));

ネイティブファイルシステム(Node.jsのみ)

スキーム: file://

await model.save('file:///path/to/my-model');

Node.jsで実行すると、ファイルシステムに直接アクセスして、そこにモデルを保存することもできます。上記のコマンドは、 scheme指定されたpath 2つのファイルを保存します。

  1. [model].jsonという名前のテキストJSONファイル。トポロジと、以下で説明する重みファイルへの参照が含まれています。
  2. [model].weights.binという名前の重み値を保持するバイナリファイル。

2つのファイルの名前は、常に上記で指定したとおりになることに注意してください(名前は関数に組み込まれています)。

tf.Modelのロード

上記の方法のいずれかを使用して保存されたモデルが与えられた場合、 tf.loadLayersModelを使用してtf.loadLayersModelロードできます。

モデルをロードするためのコードがどのように見えるかを見てみましょう

const model = await tf.loadLayersModel('localstorage://my-model-1');

注意すべきいくつかの事柄:

  • model.save()と同様に、 loadLayersModel関数は、スキームで始まるURLのような文字列引数を取ります。これは、モデルをロードしようとしている宛先のタイプを示しています。
  • スキームの後にパスが続きます。上記の例では、パスはmy-model-1です。
  • URLのような文字列は、IOHandlerインターフェイスに一致するオブジェクトに置き換えることができます。
  • tf.loadLayersModel()関数は非同期です。
  • tf.loadLayersModelの戻り値はtf.loadLayersModelですtf.Model

以下では、利用可能なさまざまなスキームを検討します。

ローカルストレージ(ブラウザのみ)

スキーム: localstorage://

const model = await tf.loadLayersModel('localstorage://my-model');

これにより、ブラウザのローカルストレージからmy-model modelという名前のモデルが読み込まれます。

IndexedDB(ブラウザのみ)

スキーム: indexeddb://

const model = await tf.loadLayersModel('indexeddb://my-model');

これにより、ブラウザのIndexedDBストレージからモデルが読み込まれます。

HTTP(S)

スキーム: http://またはhttps://

const model = await tf.loadLayersModel('http://model-server.domain/download/model.json');

これにより、httpエンドポイントからモデルが読み込まれます。 jsonファイルを読み込んだ後、関数はjsonファイルが参照する対応する.binファイルを要求します。

ネイティブファイルシステム(Node.jsのみ)

スキーム: file://

const model = await tf.loadLayersModel('file://path/to/my-model/model.json');

Node.jsで実行すると、ファイルシステムに直接アクセスでき、そこからモデルをロードできます。上記の関数呼び出しでは、model.jsonファイル自体を参照していることに注意してください(保存時にフォルダーを指定します)。対応する.binファイルはjsonファイルと同じフォルダーにある必要があります。

IOHandlerを使用したモデルのロード

上記のスキームがニーズに十分でない場合は、 IOHandlerしてカスタムの読み込み動作を実装できます。 TensorFlow.jsが提供するIOHandler 1つは、ブラウザユーザーがブラウザにモデルファイルをアップロードできるようにするtf.io.browserFilesです。詳細については、ドキュメントを参照してください。

カスタムIOHandlerを使用したモデルの保存と読み込み

上記のスキームがロードまたは保存のニーズに十分でない場合は、 IOHandler実装することでカスタムシリアル化動作を実装できIOHandler

IOHandlerは、 saveおよびloadメソッドを持つオブジェクトです。

save関数は、 ModelArtifactsインターフェースに一致する1つのパラメーターを取り、 SaveResultオブジェクトに解決されるpromiseを返す必要があります。

load関数はパラメーターを受け取らず、 ModelArtifactsオブジェクトに解決されるpromiseを返す必要があります。これは、 save渡されるのと同じオブジェクトです。

IOHandlerを実装する方法の例については、 BrowserHTTPRequestを参照してください。