ドキュメント

カスタムレイヤの作成

Core MLモデル用のカスタムレイヤを作成します。

概要

ニューラルネットワークレイヤがCore MLによってサポートされていない場合、モデル内のレイヤをCore MLに変換し、そのレイヤのコンピューティング動作を定義するバッキングクラスを実装することによって、カスタムレイヤを作成できます。

ネットワークをCore MLに変換する

標準のCore ML Tools(英語)を使用して、カスタムレイヤを含むネットワークをCore MLに変換します。詳しくは、カスタムレイヤ/演算子のドキュメント(英語)をご参照ください。

変換されたモデルの保存

変換されたモデルを保存し、.mlmodelファイルを作成します。モデルのXcodeビューでは、カスタムレイヤの統合に示されているように、モデルの依存関係のセットが表示されます。このリストは、.mlmodelファイルに追加したカスタムレイヤクラス名と一致します。

レイヤの実装

依存関係のリストは、モデルを変換する際に定義したclassNameを含む必要があります。リスト3では、クラス名はMyCustomLayerです。クラスを作成し、以下で説明するメソッドを実装することによって、MLCustomLayer(英語)プロトコルに適合させます。

  • init(parameters:)(英語)を実装して、レイヤを適切に初期化します。このメソッドは、.mlmodelファイルからのパラメータを使用して、読み込み時に一度呼び出されます。

  • setWeightData(_:)(英語)を実装して、レイヤの結合のウェイトを設定します。このメソッドは、初期化後の読み込み時に一度、.mlmodelファイルに移行したウェイトを使用して呼び出されます。

  • outputShapes(forInputShapes:)(英語)を実装して、レイヤへの入力シェイプ(入力の数)に対する出力シェイプ(出力の数)を宣言します。このメソッドは、モデルの読み込み時に呼び出され、レイヤへの入力シェイプが変わるたびに再度呼び出されます。

  • evaluate(inputs:outputs:)(英語)を実装し、カスタムレイヤのコンピューティング動作を定義します。このメソッドは、CPUでモデルが予測を行うたびに呼び出されます。

  • オプションで、レイヤがGPUで動作できるようにするには、encode(commandBuffer:inputs:outputs:)(英語)を実装します。ただし、このメソッドはGPU上での実行を保証するものではありません。

レイヤの統合

予測ワークフローは、カスタムレイヤを含まないモデルの場合と同じです。MLCustomLayerプロトコルが実装された状態では、同じprediction(from:)(英語)メソッドがモデルで動作します。カスタムのCore MLモデルと元の実装の精度を比較してください。ネットワークの作成時に使ったテストケースを使って、Core MLモデルの動作を検証します。

関連項目

モデルのカスタマイズ