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 argumentoInt
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
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]
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)