TensorVisitorPlan

public struct TensorVisitorPlan<Base>

TensorVisitorPlan se rapproche de [WritableKeyPath<Base, Tensor<Float>] mais est plus efficace. Ceci est utile pour écrire des optimiseurs génériques qui souhaitent cartographier les gradients, les poids existants et un index qui peut être utilisé pour trouver des poids stockés auxiliairement. C'est légèrement plus efficace (~ 2x) mais cela pourrait être mieux car cela échange des frais généraux légèrement plus élevés (déréférencement de pointeur supplémentaire) pour ne pas avoir à effectuer le travail O (deep_of_tree) requis avec une liste simple pour retrouver chaque KeyPath individuel.

  • Aplatissez le plan en un seul [WritableKeyPath<Base, Tensor<Float>] .

    Déclaration

    public var allTensorKeyPaths: [WritableKeyPath<Base, Tensor<Float>>] { get }
  • Collectez efficacement tous les tenseurs.

    Déclaration

    public func allTensors(_ v: Base) -> [Tensor<Float>]
  • Mappez efficacement deux valeurs de type Base et appliquez une fonction de mappage. Renvoie le nombre de tenseurs. L'argument Int supplémentaire est fourni pour permettre l'indexation dans une liste auxiliaire de Tensors avec le même nombre de Tensors que le plan.

    Déclaration

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

    func populateMask<Base>(_ mask: inout [Bool], _ kp: WritableKeyPath<Base, Tensor<Float>>)
  • Recherchez toutes les clés se terminant par un chemin de clé particulier.

    Déclaration

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

    func findFirstIndex<TrueBase, T>(
      _ rootKeyPath: WritableKeyPath<TrueBase, Base>,
      _ prefix: WritableKeyPath<TrueBase, T>, _ i: inout Int
    ) -> Bool
  • Recherchez l'index du premier chemin de clé commençant par un préfixe particulier. Remarque : Toutes les couches de tableau prennent en charge l'indexation 1 après la fin.

    Déclaration

    func firstIndex<T>(withPrefix prefix: WritableKeyPath<Base, T>) -> Int
  • Rechercher tous les indices de clés dans une plage définie par deux préfixes KeyPath : [inférieur, supérieur)

    Déclaration

    public func allKeysBetween<T, U>(lower: WritableKeyPath<Base, T>, upper: WritableKeyPath<Base, U>)
      -> [Bool]
Disponible où `Base` : `KeyPathIterable`
  • Crée un plan pour visiter tous les tenseurs dans une instance particulière de Base . Ce plan est transférable aux versions structurellement équivalentes de Base.

    Déclaration

    public init(_ obj: Base)