public protocol Differentiable
Typ, który matematycznie reprezentuje rozmaitość różniczkowalną, której przestrzenie styczne są skończenie wymiarowe.
Typ reprezentujący pochodne wartości różniczkowalnej.
Matematycznie odpowiada to wiązce stycznej rozmaitości różniczkowej reprezentowanej przez typ różniczkowalny.
Deklaracja
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
Przenosi
self
wzdłuż danego kierunku. W geometrii Riemanna, jest to równoznaczne z wykładniczym mapie, która poruszaself
na powierzchni geodezyjnej wzdłuż danej wektor styczny.Deklaracja
mutating mutating func move(along direction: TangentVector)
Zamknięcie która produkuje zerowy wektor styczny, zdobywając minimum niezbędnych informacji od
self
.move(along: zeroTangentVectorInitializer())
nie należy zmieniaćself
.W niektórych przypadkach zerowy wektor styczny z
self
jest równaTangentVector.zero
. W innych przypadkach, wektorem zera styczna uzależnione od informacji naself
, na przykład w postaci tablicy typu n-wymiarowej. Do programowania różniczkowalnej, jest bardziej wydajne pamięci zdefiniować niestandardowązeroTangentVectorInitializer
właściwość, która zwraca zamknięcie, które przechwytuje i używa tylko niezbędnych informacji, aby utworzyć wektor zerowy stycznej. Na przykład: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) } } }
Deklaracja
var zeroTangentVectorInitializer: () -> TangentVector { get }
Styczna wektor inicjowano przy
zeroTangentVectorInitializer
.move(along: zeroTangentVector)
nie powinna zmieniaćself
.Deklaracja
var zeroTangentVector: TangentVector { get }
Deklaracja
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
Stosuje danego zamknięcia do pochodnej
self
.Zwraca
self
jak funkcja tożsamości. Gdy wartość zwracana jest używana w kontekście, w którym jest zróżnicowana względem, stosuje dane zamknięcie do pochodnej wartości zwracanej.Deklaracja
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
Zwraca wyjściowe obliczane przy zastosowaniu sekwencji warstw na wyjście poprzedniej warstwy, z wyjątkiem, że wejście pierwsza warstwa jest
self
.Deklaracja
Parametry
l1
Pierwsza warstwa.
l2
Druga warstwa.
Wartość zwrotu
Wynik końcowej warstwy po nałożeniu sekwencyjnym.
Zwraca wyjściowe obliczane przy zastosowaniu sekwencji warstw na wyjście poprzedniej warstwy, z wyjątkiem, że wejście pierwsza warstwa jest
self
.Deklaracja
Parametry
l1
Pierwsza warstwa.
l2
Druga warstwa.
l3
Trzecia warstwa.
Wartość zwrotu
Wynik końcowej warstwy po nałożeniu sekwencyjnym.
Zwraca wyjściowe obliczane przy zastosowaniu sekwencji warstw na wyjście poprzedniej warstwy, z wyjątkiem, że wejście pierwsza warstwa jest
self
.Deklaracja
Parametry
l1
Pierwsza warstwa.
l2
Druga warstwa.
l3
Trzecia warstwa.
l4
Czwarta warstwa.
Wartość zwrotu
Wynik końcowej warstwy po nałożeniu sekwencyjnym.
Zwraca wyjściowe obliczane przy zastosowaniu sekwencji warstw na wyjście poprzedniej warstwy, z wyjątkiem, że wejście pierwsza warstwa jest
self
.Deklaracja
Parametry
l1
Pierwsza warstwa.
l2
Druga warstwa.
l3
Trzecia warstwa.
l4
Trzecia warstwa.
l5
Piąta warstwa.
Wartość zwrotu
Wynik końcowej warstwy po nałożeniu sekwencyjnym.
Zwraca wyjściowe obliczane przy zastosowaniu sekwencji warstw na wyjście poprzedniej warstwy, z wyjątkiem, że wejście pierwsza warstwa jest
self
.Deklaracja
@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
Parametry
l1
Pierwsza warstwa.
l2
Druga warstwa.
l3
Trzecia warstwa.
l4
Trzecia warstwa.
l5
Piąta warstwa.
l6
Szósta warstwa.
Wartość zwrotu
Wynik końcowej warstwy po nałożeniu sekwencyjnym.