TensorVisitorPlan

public struct TensorVisitorPlan<Base>

TensorVisitorPlan se aproxima a [WritableKeyPath<Base, Tensor<Float>] pero es más eficiente. Esto es útil para escribir optimizadores genéricos que quieran mapear los gradientes, los pesos existentes y un índice que pueda usarse 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 de puntero adicional) por no tener que realizar el trabajo O(profundidad_del_árbol) que se requiere con una lista simple para rastrear cada ruta clave individual.

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

    Declaración

    public var allTensorKeyPaths: [WritableKeyPath<Base, Tensor<Float>>] { get }
  • Recoge eficientemente todos los tensores.

    Declaración

    public func allTensors(_ v: Base) -> [Tensor<Float>]
  • Asigne eficientemente dos valores de tipo Base y aplique una función de mapeo. Devuelve el número de tensores. El argumento Int adicional se proporciona para permitir la indexación en una lista auxiliar de tensores con el mismo recuento de tensores que 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>>)
  • Encuentre todas las claves que terminan con una ruta de clave 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
  • Encuentre el índice de la primera ruta clave que comienza con un prefijo particular. Nota: Todas las capas de matriz admiten la indexación 1 después del 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 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 una instancia particular de Base . Este plan es transferible a versiones estructuralmente equivalentes de Base.

    Declaración

    public init(_ obj: Base)