TensorVisitorPlan

public struct TensorVisitorPlan<Base>

TensorVisitorPlan aproxima [WritableKeyPath<Base, Tensor<Float>] , pero es más eficiente. Esto es útil para escribir optimizadores genéricos que desean mapear los gradientes, los pesos existentes y un índice que se puede usar para encontrar pesos almacenados de forma auxiliar. Esto es un poco más eficiente (~ 2x) pero podría ser mejor porque compensa gastos generales ligeramente más altos (desreferencia del puntero adicional) por no tener que hacer el trabajo O (profundidad_de_árbol) que se requiere con una lista simple para rastrear cada KeyPath individual.

  • Aplanar el plan como un solo [WritableKeyPath<Base, Tensor<Float>] .

    Declaración

    public var allTensorKeyPaths: [WritableKeyPath<Base, Tensor<Float>>] { get }
  • Recoja de forma eficiente todos los tensores.

    Declaración

    public func allTensors(_ v: Base) -> [Tensor<Float>]
  • De manera eficiente asignar más de dos valores de tipo Base y aplicar una función de mapeo. Devuelve el número de tensores. El extra Int se proporciona el argumento para permitir la indexación en una lista de auxiliares de tensores con el mismo número Tensor según el plan.

    Declaración

    @discardableResult
    public func mapTensors(
      _ v1: inout Base, _ v2: Base, _ fn: (inout Tensor<Float>, Tensor<Float>, Int) -> Void
    ) -> Int
  • Declaración

    func populateMask<Base>(_ mask: inout [Bool], _ kp: WritableKeyPath<Base, Tensor<Float>>)
  • Encuentra todas las claves que terminan con una ruta de clave en particular.

    Declaración

    public func keysEnding<Base>(with kp: WritableKeyPath<Base, Tensor<Float>>) -> [Bool]
  • Declaración

    func findFirstIndex<TrueBase, T>(
      _ rootKeyPath: WritableKeyPath<TrueBase, Base>,
      _ prefix: WritableKeyPath<TrueBase, T>, _ i: inout Int
    ) -> Bool
  • Busque el índice de la primera ruta clave que comienza con un prefijo en particular. Nota: Todas las capas de la matriz admiten la indexación de 1 pasado al final.

    Declaración

    func firstIndex<T>(withPrefix prefix: WritableKeyPath<Base, T>) -> Int
  • Encuentre todos los índices de claves en un rango definido por dos prefijos de KeyPath: [inferior, superior)

    Declaración

    public func allKeysBetween<T, U>(lower: WritableKeyPath<Base, T>, upper: WritableKeyPath<Base, U>)
      -> [Bool]

Disponible donde `Base`:` KeyPathIterable`

  • Crea un plan para visitar todos los tensores en un caso particular de Base . Este plan es transferible a versiones estructuralmente equivalentes de Base.

    Declaración

    public init(_ obj: Base)