レイヤ

Tensor並列計算を高速化するための基本的な構成要素であるのと同様に、ほとんどの機械学習モデルと操作はLayerプロトコルの観点から表現されます。 Layer微分可能な入力を受け取り、それを処理し、微分可能な出力を生成する型のインターフェイスを定義します。 Layerトレーニング可能な重みなどの状態を含めることができます。

LayerModuleプロトコルを改良したもので、 Module型への入力が必ずしも微分可能ではない、より一般的なケースを定義します。モデル内のほとんどのコンポーネントは微分可能な入力を処理しますが、代わりに型がModuleに準拠する必要がある場合があります。

作成したオペレーションにトレーニング可能なパラメーターが含まれていない場合は、 LayerではなくParameterlessLayerを使用してオペレーションを定義する必要があります。

モデル自体は多くの場合Layerとして定義され、通常は他のLayerで構成されます。 Layerとして定義されたモデルまたはサブユニットは、他のLayerと同様に扱うことができるため、他のモデルまたはサブユニットから任意に複雑なモデルを構築できます。

独自のモデルまたはオペレーションのカスタムLayerを定義するには、通常、次のようなテンプレートに従います。

public struct MyModel: Layer {
  // Define your layers or other properties here.

  // A custom initializer may be desired to configure the model.
  public init() {}

  @differentiable
  public func callAsFunction(_ input: Tensor<Float>) -> Tensor<Float> {
    // Define the sequence of operations performed on model input to arrive at the output.
    return ...
  }
}

重みやバイアスなどのLayersのトレーニング可能なコンポーネントや他のLayerは、プロパティとして宣言できます。カスタム初期化子は、レイヤーの可変数や分類モデルの出力サイズなど、モデルのカスタマイズ可能なパラメーターを公開するのに適しています。最後に、 LayerのコアはcallAsFunction()で、入力と出力の型と、一方を受け取ってもう一方を返す変換を定義します。

内蔵レイヤー

多くの一般的な機械学習操作は、モデルまたはサブユニットを定義するときに使用できるように、 Layerとしてカプセル化されています。以下は、Swift によって TensorFlow 用に提供されるレイヤーのリストであり、機能分野ごとにグループ化されています。

増強

コンボリューション

埋め込み

形態学的

正規化

プーリング

リカレント ニューラル ネットワーク

再形成

アップサンプリング

オプティマイザー

オプティマイザーは機械学習モデルのトレーニングの重要なコンポーネントであり、計算された勾配に基づいてモデルを更新します。これらの更新は、理想的には、モデルをトレーニングするような方法でモデルのパラメーターを調整します。

オプティマイザーを使用するには、まず、適切なトレーニング パラメーターを使用してターゲット モデル用にオプティマイザーを初期化します。

let optimizer = RMSProp(for: model, learningRate: 0.0001, decay: 1e-6)

入力および損失関数に関する勾配を取得してモデルをトレーニングし、オプティマイザーを使用してその勾配に沿ってモデルを更新します。

optimizer.update(&model, along: gradients)

組み込みのオプティマイザー

Swift では、いくつかの一般的なオプティマイザーが TensorFlow 用に提供されています。これらには次のものが含まれます。