Capas

Así como Tensor es nuestro componente fundamental para la computación paralela acelerada, la mayoría de los modelos y operaciones de aprendizaje automático se expresarán en términos del protocolo Layer . Layer define una interfaz para tipos que toman una entrada diferenciable, la procesan y producen una salida diferenciable. Una Layer puede contener estados, como pesos entrenables.

Layer es un refinamiento del protocolo Module , en el que Module define el caso más general en el que la entrada al tipo no es necesariamente diferenciable. La mayoría de los componentes de un modelo se ocuparán de entradas diferenciables, pero hay casos en los que es posible que los tipos deban ajustarse al Module .

Si crea una operación que no tiene parámetros entrenables, querrá definirla en términos de ParameterlessLayer en lugar de Layer .

Los modelos en sí mismos a menudo se definen como Layer s y normalmente se componen de otras Layer s. Un modelo o subunidad que se ha definido como Layer puede tratarse como cualquier otra Layer , permitiendo la construcción de modelos arbitrariamente complejos a partir de otros modelos o subunidades.

Para definir una Layer personalizada para un modelo u operación propia, generalmente seguirá una plantilla similar a esta:

public struct MyModel: Layer {
  // Define your layers or other properties here.

  // A custom initializer may be desired to configure the model.
  public init() {}

  @differentiable
  public func callAsFunction(_ input: Tensor<Float>) -> Tensor<Float> {
    // Define the sequence of operations performed on model input to arrive at the output.
    return ...
  }
}

Los componentes entrenables de Layers , como pesos y sesgos, así como otros Layer , se pueden declarar como propiedades. Un inicializador personalizado es un buen lugar para exponer parámetros personalizables para un modelo, como un número variable de capas o el tamaño de salida de un modelo de clasificación. Finalmente, el núcleo de la Layer es callAsFunction() , donde definirás los tipos de entrada y salida, así como la transformación que toma una y devuelve la otra.

Capas incorporadas

Muchas operaciones comunes de aprendizaje automático se han encapsulado como Layer s para que usted pueda usarlas al definir modelos o subunidades. La siguiente es una lista de las capas proporcionadas por Swift para TensorFlow, agrupadas por áreas funcionales:

Aumento

Circunvolución

incrustar

Morfológico

Normalización

Agrupación

Redes neuronales recurrentes

Reorganización

muestreo superior

Optimizadores

Los optimizadores son un componente clave del entrenamiento de un modelo de aprendizaje automático, actualizando el modelo en función de un gradiente calculado. Lo ideal es que estas actualizaciones ajusten los parámetros de un modelo de tal manera que se entrene el modelo.

Para utilizar un optimizador, primero inicialícelo para un modelo de destino con los parámetros de entrenamiento adecuados:

let optimizer = RMSProp(for: model, learningRate: 0.0001, decay: 1e-6)

Entrene un modelo obteniendo un gradiente con respecto a la entrada y una función de pérdida, y luego actualice el modelo a lo largo de ese gradiente usando su optimizador:

optimizer.update(&model, along: gradients)

Optimizadores incorporados

Swift proporciona varios optimizadores comunes para TensorFlow. Estos incluyen lo siguiente: