TensorVisitorPlan

public struct TensorVisitorPlan<Base>

TensorVisitorPlan si avvicina a [WritableKeyPath<Base, Tensor<Float>] ma è più efficiente. Ciò è utile per scrivere ottimizzatori generici che desiderano mappare i gradienti, i pesi esistenti e un indice che può essere utilizzato per trovare pesi memorizzati ausiliari. Questo è leggermente più efficiente (~2x) ma potrebbe essere migliore perché compensa spese generali leggermente più elevate (dereferenziazione extra del puntatore) per non dover eseguire il lavoro O (profondità_of_tree) richiesto con un elenco semplice per rintracciare ogni singolo KeyPath.

  • Appiattire il piano come un singolo [WritableKeyPath<Base, Tensor<Float>] .

    Dichiarazione

    public var allTensorKeyPaths: [WritableKeyPath<Base, Tensor<Float>>] { get }
  • Raccogli in modo efficiente tutti i tensori.

    Dichiarazione

    public func allTensors(_ v: Base) -> [Tensor<Float>]
  • Mappare in modo efficiente due valori di tipo Base e applicare una funzione di mappatura. Restituisce il numero di tensori. L'argomento Int aggiuntivo viene fornito per consentire l'indicizzazione in un elenco ausiliario di tensori con lo stesso conteggio di tensori del piano.

    Dichiarazione

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

    func populateMask<Base>(_ mask: inout [Bool], _ kp: WritableKeyPath<Base, Tensor<Float>>)
  • Trova tutte le chiavi che terminano con un particolare percorso chiave.

    Dichiarazione

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

    func findFirstIndex<TrueBase, T>(
      _ rootKeyPath: WritableKeyPath<TrueBase, Base>,
      _ prefix: WritableKeyPath<TrueBase, T>, _ i: inout Int
    ) -> Bool
  • Trova l'indice del primo percorso chiave che inizia con un prefisso particolare. Nota: tutti i livelli dell'array supportano l'indicizzazione 1 oltre la fine.

    Dichiarazione

    func firstIndex<T>(withPrefix prefix: WritableKeyPath<Base, T>) -> Int
  • Trova tutti gli indici delle chiavi in ​​un intervallo definito da due prefissi KeyPath: [inferiore, superiore)

    Dichiarazione

    public func allKeysBetween<T, U>(lower: WritableKeyPath<Base, T>, upper: WritableKeyPath<Base, U>)
      -> [Bool]
Disponibile dove `Base`: `KeyPathIterable`
  • Crea un piano per visitare tutti i tensori in una particolare istanza di Base . Questo piano è trasferibile a versioni strutturalmente equivalenti di Base.

    Dichiarazione

    public init(_ obj: Base)