TensorVisitorPlan

public struct TensorVisitorPlan<Base>

TensorVisitorPlan se aproxima [WritableKeyPath<Base, Tensor<Float>] mas é mais eficiente. Isso é útil para escrever otimizadores genéricos que desejam mapear os gradientes, os pesos existentes e um índice que pode ser usado para encontrar pesos armazenados auxiliarmente. Isso é um pouco mais eficiente (~ 2x), mas poderia ser melhor porque compensa despesas gerais um pouco mais altas (desreferência de ponteiro extra) por não ter que fazer o trabalho O (profundidade_de_árvore) necessário com uma lista simples para rastrear cada KeyPath individual.

  • Achate 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>]
  • Mapeie com eficiência dois valores do tipo Base e aplique uma função de mapeamento. Retorna o número de tensores. O argumento Int extra é fornecido para permitir a indexação em uma lista auxiliar de Tensores com a mesma contagem de Tensores do plano.

    Declaração

    @discardableResult
    public func mapTensors(
      _ v1: inout Base, _ v2: Base, _ fn: (inout Tensor<Float>, Tensor<Float>, Int) -> Void
    ) -> Int
  • 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 de array suportam indexação 1 após o final.

    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]
Disponível onde `Base`: `KeyPathIterable`
  • 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)