protocol MLCustomLayer (英語)
protocol MLCustomModel (英語)
フレームワーク
ニューラルネットワークレイヤがCore MLによってサポートされていない場合、モデル内のレイヤをCore MLに変換し、そのレイヤのコンピューティング動作を定義するバッキングクラスを実装することによって、カスタムレイヤを作成できます。
標準のCore ML Tools(英語)を使用して、カスタムレイヤを含むネットワークをCore MLに変換します。詳しくは、カスタムレイヤ/演算子のドキュメント(英語)をご参照ください。
変換されたモデルを保存し、.mlmodel
ファイルを作成します。モデルのXcodeビューでは、カスタムレイヤの統合に示されているように、モデルの依存関係のセットが表示されます。このリストは、.mlmodel
ファイルに追加したカスタムレイヤクラス名と一致します。
依存関係のリストは、モデルを変換する際に定義したclass
を含む必要があります。リスト3では、クラス名はMy
です。クラスを作成し、以下で説明するメソッドを実装することによって、MLCustom
(英語)プロトコルに適合させます。
メモ
Swiftでは、MLCustom
を実装するクラスに@objc(
name)
の属性を追加します。これは、Core MLがカスタムレイヤ実装にアクセスする上で必要なクラスのObjective-C名を定義します。
init(parameters:)
(英語)を実装して、レイヤを適切に初期化します。このメソッドは、.mlmodel
ファイルからのパラメータを使用して、読み込み時に一度呼び出されます。
set
(英語)を実装して、レイヤの結合のウェイトを設定します。このメソッドは、初期化後の読み込み時に一度、.mlmodel
ファイルに移行したウェイトを使用して呼び出されます。
output
(英語)を実装して、レイヤへの入力シェイプ(入力の数)に対する出力シェイプ(出力の数)を宣言します。このメソッドは、モデルの読み込み時に呼び出され、レイヤへの入力シェイプが変わるたびに再度呼び出されます。
evaluate(inputs:
(英語)を実装し、カスタムレイヤのコンピューティング動作を定義します。このメソッドは、CPUでモデルが予測を行うたびに呼び出されます。
オプションで、レイヤがGPUで動作できるようにするには、encode(command
(英語)を実装します。ただし、このメソッドはGPU上での実行を保証するものではありません。
重要
これらの関数に渡される構造体(ウェイト、入力、または出力)のどのメモリも変更しないでください。
予測ワークフローは、カスタムレイヤを含まないモデルの場合と同じです。MLCustom
プロトコルが実装された状態では、同じprediction(from:)
(英語)メソッドがモデルで動作します。カスタムのCore MLモデルと元の実装の精度を比較してください。ネットワークの作成時に使ったテストケースを使って、Core MLモデルの動作を検証します。
protocol MLCustomLayer (英語)
protocol MLCustomModel (英語)