public struct TensorVisitorPlan<Base>
TensorVisitorPlan jest przybliżony [WritableKeyPath<Base, Tensor<Float>]
ale jest bardziej wydajny. Jest to przydatne do pisania ogólnych optymalizatorów, które chcą odwzorować gradienty, istniejące wagi i indeks, którego można użyć do znalezienia pomocniczo przechowywanych wag. Jest to nieco bardziej wydajne (~2x), ale mogłoby być lepsze, ponieważ rezygnuje z nieco wyższych kosztów ogólnych (dodatkowe wyłuskiwanie wskaźnika) za brak konieczności wykonywania pracy O(głębia_drzewa), która jest wymagana w przypadku zwykłej listy do śledzenia każdej indywidualnej ścieżki klucza.
Spłaszcz plan jako pojedynczy
[WritableKeyPath<Base, Tensor<Float>]
.Deklaracja
public var allTensorKeyPaths: [WritableKeyPath<Base, Tensor<Float>>] { get }
Efektywnie zbierz wszystkie tensory.
Deklaracja
public func allTensors(_ v: Base) -> [Tensor<Float>]
Efektywnie mapuj dwie wartości typu
Base
i zastosuj funkcję mapowania. Zwraca liczbę tensorów. Dodatkowy argumentInt
umożliwia indeksowanie do pomocniczej listy tensorów z tą samą liczbą tensorów co plan.Deklaracja
func populateMask<Base>(_ mask: inout [Bool], _ kp: WritableKeyPath<Base, Tensor<Float>>)
Znajdź wszystkie klucze kończące się określoną ścieżką klucza.
Deklaracja
public func keysEnding<Base>(with kp: WritableKeyPath<Base, Tensor<Float>>) -> [Bool]
Deklaracja
func findFirstIndex<TrueBase, T>( _ rootKeyPath: WritableKeyPath<TrueBase, Base>, _ prefix: WritableKeyPath<TrueBase, T>, _ i: inout Int ) -> Bool
Znajdź indeks pierwszej ścieżki klucza zaczynającej się od określonego przedrostka. Uwaga: wszystkie warstwy tablicowe obsługują indeksowanie od 1 do 1 końca.
Deklaracja
func firstIndex<T>(withPrefix prefix: WritableKeyPath<Base, T>) -> Int
Znajdź wszystkie indeksy kluczy w zakresie zdefiniowanym przez dwa przedrostki KeyPath: [dolny, górny)
Deklaracja
public func allKeysBetween<T, U>(lower: WritableKeyPath<Base, T>, upper: WritableKeyPath<Base, U>) -> [Bool]
Tworzy plan odwiedzenia wszystkich tensorów w określonej instancji
Base
. Ten plan można przenieść na strukturalnie równoważne wersje Base.Deklaracja
public init(_ obj: Base)