public struct TensorVisitorPlan<Base>
TensorVisitorPlan aproxima [WritableKeyPath<Base, Tensor<Float>]
, mas é mais eficiente. Isso é útil para escrever otimizadores genéricos que desejam mapear gradientes, pesos existentes e um índice que pode ser usado para encontrar pesos armazenados auxiliares. Isso é um pouco mais eficiente (~ 2x), mas poderia ser melhor porque compensa sobrecargas ligeiramente maiores (desreferência de ponteiro extra) por não ter que fazer o trabalho O (depth_of_tree) que é necessário com uma lista simples para rastrear cada KeyPath individual.
Achatar o plano como um único
[WritableKeyPath<Base, Tensor<Float>]
.Declaração
public var allTensorKeyPaths: [WritableKeyPath<Base, Tensor<Float>>] { get }
Colete com eficiência todos os tensores.
Declaração
public func allTensors(_ v: Base) -> [Tensor<Float>]
Eficientemente mapear mais de dois valores do tipo
Base
e aplicar uma função de mapeamento. Retorna o número de tensores. O adicionalInt
argumento é fornecido para permitir a indexação em uma lista auxiliar de tensores com a mesma contagem Tensor como o plano.Declaração
func populateMask<Base>(_ mask: inout [Bool], _ kp: WritableKeyPath<Base, Tensor<Float>>)
Encontre todas as chaves que terminam com um caminho de chave específico.
Declaração
public func keysEnding<Base>(with kp: WritableKeyPath<Base, Tensor<Float>>) -> [Bool]
Declaração
func findFirstIndex<TrueBase, T>( _ rootKeyPath: WritableKeyPath<TrueBase, Base>, _ prefix: WritableKeyPath<TrueBase, T>, _ i: inout Int ) -> Bool
Encontre o índice do primeiro caminho-chave começando com um prefixo específico. Nota: Todas as camadas da matriz suportam indexação 1-passada.
Declaração
func firstIndex<T>(withPrefix prefix: WritableKeyPath<Base, T>) -> Int
Encontre todos os índices de chaves em um intervalo definido por dois prefixos KeyPath: [inferior, superior)
Declaração
public func allKeysBetween<T, U>(lower: WritableKeyPath<Base, T>, upper: WritableKeyPath<Base, U>) -> [Bool]
Cria um plano para visitar todos os tensores em uma instância específica de
Base
. Este plano é transferível para versões estruturalmente equivalentes do Base.Declaração
public init(_ obj: Base)