¡Reserva! Google I / O regresa del 18 al 20 de mayo Regístrese ahora
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Diferenciable

public protocol Differentiable

Un tipo que representa matemáticamente una variedad diferenciable cuyos espacios tangentes son de dimensión finita.

  • Un tipo que representa las derivadas de un valor diferenciable.

    Matemáticamente, esto es equivalente al paquete tangente de la variedad diferenciable representada por el tipo diferenciable.

    Declaración

    associatedtype TangentVector: Differentiable & AdditiveArithmetic
      where TangentVector.TangentVector == TangentVector
  • Mueve self lo largo de la dirección dada. En la geometría de Riemann, esto es equivalente a un mapa exponencial, que se mueve a self en la superficie geodésica a lo largo del vector tangente dado.

    Declaración

    mutating mutating func move(along direction: TangentVector)
  • Un cierre que produce un vector tangente cero, capturando la mínima información necesaria de self .

    move(along: zeroTangentVectorInitializer()) no debería modificarse a self .

    En algunos casos, el vector tangente cero de self es igual a TangentVector.zero . En otros casos, el vector de tangente cero depende de la información en self , como la forma de un tipo de matriz n-dimensional. Para la programación diferenciable, es más eficiente en memoria definir una propiedad zeroTangentVectorInitializer personalizada que devuelve un cierre que captura y usa solo la información necesaria para crear un vector tangente cero. Por ejemplo:

    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) }
        }
    }
    

    Declaración

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

    Método de extensión

    Un vector tangente inicializado usando zeroTangentVectorInitializer . move(along: zeroTangentVector) no debería modificarse a self .

    Declaración

    var zeroTangentVector: TangentVector { get }
  • withRecomputationInPullbacks (_ :)

    Método de extensión

    Declaración

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • withDerivative (_ :)

    Método de extensión

    Aplica el cierre dado a la derivada del self .

    Se devuelve a self como una función de identidad. Cuando el valor de retorno se usa en un contexto en el que se diferencia con respecto a, se aplica el cierre dado a la derivada del valor de retorno.

    Declaración

    @differentiable(wrt: self)
    func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
  • secuenciado (hasta: _ :)

    Método de extensión

    Devuelve la salida calculada aplicando una secuencia de capas a la salida de la capa anterior, excepto que la entrada de la primera capa es self .

    Declaración

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

    Parámetros

    l1

    La primera capa.

    l2

    La segunda capa.

    Valor devuelto

    Salida de la capa final después de la aplicación secuencial.

  • secuenciado (hasta: _: _ :)

    Método de extensión

    Devuelve la salida calculada aplicando una secuencia de capas a la salida de la capa anterior, excepto que la entrada de la primera capa es self .

    Declaración

    @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

    Parámetros

    l1

    La primera capa.

    l2

    La segunda capa.

    l3

    La tercera capa.

    Valor devuelto

    Salida de la capa final después de la aplicación secuencial.

  • secuenciado (hasta: _: _: _ :)

    Método de extensión

    Devuelve la salida calculada aplicando una secuencia de capas a la salida de la capa anterior, excepto que la entrada de la primera capa es self .

    Declaración

    @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

    Parámetros

    l1

    La primera capa.

    l2

    La segunda capa.

    l3

    La tercera capa.

    l4

    La cuarta capa.

    Valor devuelto

    Salida de la capa final después de la aplicación secuencial.

  • secuenciado (hasta: _: _: _: _ :)

    Método de extensión

    Devuelve la salida calculada aplicando una secuencia de capas a la salida de la capa anterior, excepto que la entrada de la primera capa es self .

    Declaración

    @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

    Parámetros

    l1

    La primera capa.

    l2

    La segunda capa.

    l3

    La tercera capa.

    l4

    La tercera capa.

    l5

    La quinta capa.

    Valor devuelto

    Salida de la capa final después de la aplicación secuencial.

  • secuenciado (hasta: _: _: _: _: _ :)

    Método de extensión

    Devuelve la salida calculada aplicando una secuencia de capas a la salida de la capa anterior, excepto que la entrada de la primera capa es self .

    Declaración

    @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

    La primera capa.

    l2

    La segunda capa.

    l3

    La tercera capa.

    l4

    La tercera capa.

    l5

    La quinta capa.

    l6

    La sexta capa.

    Valor devuelto

    Salida de la capa final después de la aplicación secuencial.