ТензорВизиторПлан

public struct TensorVisitorPlan<Base>

TensorVisitorPlan приближается к [WritableKeyPath<Base, Tensor<Float>] , но более эффективен. Это полезно для написания универсальных оптимизаторов, которые хотят сопоставить градиенты, существующие веса и индекс, который можно использовать для поиска вспомогательно сохраненных весов. Это немного более эффективно (~ в 2 раза), но может быть и лучше, поскольку позволяет компенсировать несколько более высокие накладные расходы (дополнительное разыменование указателя) за отсутствие необходимости выполнять работу O(глубина_дерева), которая требуется с простым списком для отслеживания каждого отдельного KeyPath.

  • Выровняйте план как один [WritableKeyPath<Base, Tensor<Float>] .

    Декларация

    public var allTensorKeyPaths: [WritableKeyPath<Base, Tensor<Float>>] { get }
  • Эффективно собрать все тензоры.

    Декларация

    public func allTensors(_ v: Base) -> [Tensor<Float>]
  • Эффективно сопоставьте два значения типа Base и примените функцию сопоставления. Возвращает количество тензоров. Дополнительный аргумент Int позволяет индексировать вспомогательный список тензоров с тем же количеством тензоров, что и план.

    Декларация

    @discardableResult
    public func mapTensors(
      _ v1: inout Base, _ v2: Base, _ fn: (inout Tensor<Float>, Tensor<Float>, Int) -> Void
    ) -> Int
  • Декларация

    func populateMask<Base>(_ mask: inout [Bool], _ kp: WritableKeyPath<Base, Tensor<Float>>)
  • Найдите все ключи, оканчивающиеся на определенный путь.

    Декларация

    public func keysEnding<Base>(with kp: WritableKeyPath<Base, Tensor<Float>>) -> [Bool]
  • Декларация

    func findFirstIndex<TrueBase, T>(
      _ rootKeyPath: WritableKeyPath<TrueBase, Base>,
      _ prefix: WritableKeyPath<TrueBase, T>, _ i: inout Int
    ) -> Bool
  • Найдите индекс первого ключевого пути, начинающегося с определенного префикса. Примечание. Все слои массива поддерживают индексацию до конца.

    Декларация

    func firstIndex<T>(withPrefix prefix: WritableKeyPath<Base, T>) -> Int
  • Найдите все индексы ключей в диапазоне, определенном двумя префиксами KeyPath: [нижний, верхний)

    Декларация

    public func allKeysBetween<T, U>(lower: WritableKeyPath<Base, T>, upper: WritableKeyPath<Base, U>)
      -> [Bool]
Доступно, если `Base`: `KeyPathIterable`
  • Создает план посещения всех тензоров в конкретном экземпляре Base . Этот план можно перенести на структурно эквивалентные версии Base.

    Декларация

    public init(_ obj: Base)