質問があります? TensorFlowフォーラム訪問フォーラムでコミュニティとつながる

微分可能

public protocol Differentiable

接空間が有限次元である可微分多様体を数学的に表す型。

  • 微分可能な値のデリバティブを表すタイプ。

    数学的には、これは微分可能型で表される可微分多様体の接束に相当します。

    宣言

    associatedtype TangentVector: Differentiable & AdditiveArithmetic
      where TangentVector.TangentVector == TangentVector
  • 指定された方向に沿ってself移動します。リーマン幾何学では、これは指数写像に相当し、与えられた接線ベクトルに沿って測地線表面上をself移動します。

    宣言

    mutating mutating func move(along direction: TangentVector)
  • ゼロ接線ベクトルを生成し、 selfから必要最小限の情報を取得するクロージャ。

    move(along: zeroTangentVectorInitializer())self変更しないでください。

    場合によっては、 selfゼロ接線ベクトルはTangentVector.zero等しくなりTangentVector.zero 。その他の場合、ゼロ接線ベクトルは、n次元配列型の形状など、 self情報に依存します。微分可能プログラミングの場合、ゼロタンジェントベクトルを作成するために必要な情報のみをキャプチャして使用するクロージャを返すカスタムzeroTangentVectorInitializerプロパティを定義する方がメモリ効率が高くなります。例えば:

    struct Vector {
        var scalars: [Float]
        var count: Int { scalars.count }
        init(scalars: [Float]) { ... }
        init(repeating repeatedElement: Float, count: Int) { ... }
    }
    
    extension Vector: AdditiveArithmetic { ... }
    
    extension Vector: Differentiable {
        typealias TangentVector = Vector
    
        @noDerivative
        var zeroTangentVectorInitializer: () -> TangentVector {
            let count = self.count
            return { TangentVector(repeating: 0, count: count) }
        }
    }
    

    宣言

    var zeroTangentVectorInitializer: () -> TangentVector { get }
  • zeroTangentVector

    拡張方法

    zeroTangentVectorInitializerを使用して初期化された接線ベクトル。 move(along: zeroTangentVector)self変更しないでください。

    宣言

    var zeroTangentVector: TangentVector { get }
  • 宣言

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • 与えられたクロージャをselfの導関数に適用します。

    恒等関数のようにself返します。で区別されるコンテキストで戻り値が使用される場合、指定されたクロージャを戻り値の導関数に適用します。

    宣言

    @differentiable(wrt: self)
    func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
  • 最初のレイヤーの入力がselfことを除いて、レイヤーのシーケンスを前のレイヤーの出力に適用することによって計算された出力を返します。

    宣言

    @differentiable
    public func sequenced<L1: Layer, L2: Layer>(through l1: L1, _ l2: L2) -> L2.Output
    where L1.Input == Self, L1.Output == L2.Input

    パラメーター

    l1

    最初のレイヤー。

    l2

    2番目のレイヤー。

    戻り値

    順次適用後の最終層の出力。

  • 最初のレイヤーの入力がselfことを除いて、レイヤーのシーケンスを前のレイヤーの出力に適用することによって計算された出力を返します。

    宣言

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer>(through l1: L1, _ l2: L2, _ l3: L3)
      -> L3.Output
    where L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input

    パラメーター

    l1

    最初のレイヤー。

    l2

    2番目のレイヤー。

    l3

    3番目のレイヤー。

    戻り値

    順次適用後の最終層の出力。

  • 最初のレイヤーの入力がselfことを除いて、レイヤーのシーケンスを前のレイヤーの出力に適用することによって計算された出力を返します。

    宣言

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4
    ) -> L4.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input,
      L3.Output == L4.Input

    パラメーター

    l1

    最初のレイヤー。

    l2

    2番目のレイヤー。

    l3

    3番目のレイヤー。

    l4

    4番目のレイヤー。

    戻り値

    順次適用後の最終層の出力。

  • 最初のレイヤーの入力がselfことを除いて、レイヤーのシーケンスを前のレイヤーの出力に適用することによって計算された出力を返します。

    宣言

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer, L5: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4, _ l5: L5
    ) -> L5.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input, L3.Output == L4.Input,
      L4.Output == L5.Input

    パラメーター

    l1

    最初のレイヤー。

    l2

    2番目のレイヤー。

    l3

    3番目のレイヤー。

    l4

    3番目のレイヤー。

    l5

    5番目のレイヤー。

    戻り値

    順次適用後の最終層の出力。

  • 最初のレイヤーの入力がselfことを除いて、レイヤーのシーケンスを前のレイヤーの出力に適用することによって計算された出力を返します。

    宣言

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer, L5: Layer, L6: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4, _ l5: L5, _ l6: L6
    ) -> L6.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input, L3.Output == L4.Input,
      L4.Output == L5.Input, L5.Output == L6.Input

    パラメーター

    l1

    最初のレイヤー。

    l2

    2番目のレイヤー。

    l3

    3番目のレイヤー。

    l4

    3番目のレイヤー。

    l5

    5番目のレイヤー。

    l6

    6番目のレイヤー。

    戻り値

    順次適用後の最終層の出力。