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
позволяет индексировать вспомогательный список тензоров с тем же количеством тензоров, что и план.Декларация
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
. Этот план можно перенести на структурно эквивалентные версии Base.Декларация
public init(_ obj: Base)