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 as derivadas de um valor diferenciável.
Matematicamente, isso equivale ao fibrado 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 direção determinada. Na geometria Riemanniana, isso é equivalente ao mapa exponencial, queself
move na superfície geodésica ao longo de um determinado vetor tangente.Declaração
mutating mutating func move(along direction: TangentVector)
Um fechamento que produz um vetor tangente zero, capturando o mínimo de informações necessárias de
self
.move(along: zeroTangentVectorInitializer())
não deve modificarself
.Em alguns casos, o vetor tangente zero de
self
é igual aTangentVector.zero
. Em outros casos, o vetor tangente zero depende de informações emself
, como a forma de um tipo de matriz n-dimensional. Para programação diferenciável, é mais eficiente em termos de memória definir uma propriedade customizadazeroTangentVectorInitializer
que retorna um fechamento que captura e usa apenas as informações necessárias para criar um vetor tangente zero. 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 vetor 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 o fechamento fornecido à derivada de
self
.Retorna
self
como uma função de identidade. Quando o valor de retorno é usado em um contexto onde é diferenciado em relação a, aplica-se o fechamento dado à derivada do valor de retorno.Declaração
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto 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.
Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto 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.
Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto 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.
Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto 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.
Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto 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.
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 as derivadas de um valor diferenciável.
Matematicamente, isso equivale ao fibrado 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 direção determinada. Na geometria Riemanniana, isso é equivalente ao mapa exponencial, queself
move na superfície geodésica ao longo de um determinado vetor tangente.Declaração
mutating mutating func move(along direction: TangentVector)
Um fechamento que produz um vetor tangente zero, capturando o mínimo de informações necessárias de
self
.move(along: zeroTangentVectorInitializer())
não deve modificarself
.Em alguns casos, o vetor tangente zero de
self
é igual aTangentVector.zero
. Em outros casos, o vetor tangente zero depende de informações emself
, como a forma de um tipo de matriz n-dimensional. Para programação diferenciável, é mais eficiente em termos de memória definir uma propriedade customizadazeroTangentVectorInitializer
que retorna um fechamento que captura e usa apenas as informações necessárias para criar um vetor tangente zero. 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 vetor 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 o fechamento fornecido à derivada de
self
.Retorna
self
como uma função de identidade. Quando o valor de retorno é usado em um contexto onde é diferenciado em relação a, aplica-se o fechamento dado à derivada do valor de retorno.Declaração
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto 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.
Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto 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.
Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto 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.
Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto 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.
Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto 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.