public protocol Differentiable
Um tipo que representa matematicamente uma variedade diferenciável cujos espaços tangentes são de dimensão finita.
Um tipo que representa os derivados de um valor diferenciável.
Matematicamente, isso é equivalente ao feixe tangente da variedade diferenciável representada pelo tipo diferenciável.
Declaração
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
Move
self
ao longo da direcção dada. Na geometria Riemannianos, isto é equivalente a mapa exponencial, que se moveself
na superfície geodésica ao longo do dado vector tangente.Declaração
mutating mutating func move(along direction: TangentVector)
Um fechamento que produz um vetor de zero tangente, capturando informação mínima necessária de
self
.move(along: zeroTangentVectorInitializer())
não deve modificarself
.Em alguns casos, o vetor nulo tangente de
self
é igual aTangentVector.zero
. Em outros casos, o vector de zero tangente depende de informação emself
, tais como a forma de um tipo de matriz n-dimensional. Para programação diferenciável, é mais memória eficiente para definir um costumezeroTangentVectorInitializer
propriedade que retorna um fecho que captura e utiliza apenas as informações necessárias para criar um vetor de zero tangente. Por exemplo: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) } } }
Declaração
var zeroTangentVectorInitializer: () -> TangentVector { get }
Um vector tangente inicializado usando
zeroTangentVectorInitializer
.move(along: zeroTangentVector)
não deve modificarself
.Declaração
var zeroTangentVector: TangentVector { get }
Declaração
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
Aplica-se o fecho dado que o derivado de
self
.Devoluções
self
como uma função de identidade. Quando o valor de retorno é usado em um contexto onde é diferenciado em relação a, aplica o fechamento fornecido à derivada do valor de retorno.Declaração
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
Devolve o resultado calculado pela aplicação de uma sequência de camadas para a produção da camada anterior, excepto que a entrada da primeira camada é
self
.Declaração
Parâmetros
l1
A primeira camada.
l2
A segunda camada.
Valor de retorno
A saída da camada final após a aplicação sequencial.
Devolve o resultado calculado pela aplicação de uma sequência de camadas para a produção da camada anterior, excepto que a entrada da primeira camada é
self
.Declaração
Parâmetros
l1
A primeira camada.
l2
A segunda camada.
l3
A terceira camada.
Valor de retorno
A saída da camada final após a aplicação sequencial.
Devolve o resultado calculado pela aplicação de uma sequência de camadas para a produção da camada anterior, excepto que a entrada da primeira camada é
self
.Declaração
Parâmetros
l1
A primeira camada.
l2
A segunda camada.
l3
A terceira camada.
l4
A quarta camada.
Valor de retorno
A saída da camada final após a aplicação sequencial.
Devolve o resultado calculado pela aplicação de uma sequência de camadas para a produção da camada anterior, excepto que a entrada da primeira camada é
self
.Declaração
Parâmetros
l1
A primeira camada.
l2
A segunda camada.
l3
A terceira camada.
l4
A terceira camada.
l5
A quinta camada.
Valor de retorno
A saída da camada final após a aplicação sequencial.
Devolve o resultado calculado pela aplicação de uma sequência de camadas para a produção da camada anterior, excepto que a entrada da primeira camada é
self
.Declaração
@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
Parâmetros
l1
A primeira camada.
l2
A segunda camada.
l3
A terceira camada.
l4
A terceira camada.
l5
A quinta camada.
l6
A sexta camada.
Valor de retorno
A saída da camada final após a aplicação sequencial.