TensorVisitorPlan

public struct TensorVisitorPlan<Base>

TensorVisitorPlan은 [WritableKeyPath<Base, Tensor<Float>] 에 가깝지만 더 효율적입니다. 이는 그라디언트, 기존 가중치 및 보조적으로 저장된 가중치를 찾는 데 사용할 수 있는 인덱스를 매핑하려는 일반 최적화 프로그램을 작성하는 데 유용합니다. 이는 약간 더 효율적이지만(~2x) 각 개별 KeyPath를 추적하기 위해 일반 목록에 필요한 O(length_of_tree) 작업을 수행할 필요가 없기 때문에 약간 더 높은 오버헤드(추가 포인터 역참조)를 상쇄하므로 더 나을 수 있습니다.

  • 계획을 단일 [WritableKeyPath<Base, Tensor<Float>] 로 평면화합니다.

    선언

    public var allTensorKeyPaths: [WritableKeyPath<Base, Tensor<Float>>] { get }
  • 모든 텐서를 효율적으로 수집합니다.

    선언

    public func allTensors(_ v: Base) -> [Tensor<Float>]
  • Base 유형의 두 값을 효율적으로 매핑하고 매핑 기능을 적용합니다. 텐서의 수를 반환합니다. 계획과 동일한 Tensor 개수를 가진 Tensor의 보조 목록에 대한 인덱싱을 허용하기 위해 추가 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
  • 특정 접두사로 시작하는 첫 번째 키 경로의 인덱스를 찾습니다. 참고: 모든 배열 레이어는 1부터 끝까지 인덱싱을 지원합니다.

    선언

    func firstIndex<T>(withPrefix prefix: WritableKeyPath<Base, T>) -> Int
  • 두 개의 KeyPath 접두사([lower, upper)로 정의된 범위에서 모든 키 인덱스를 찾습니다.

    선언

    public func allKeysBetween<T, U>(lower: WritableKeyPath<Base, T>, upper: WritableKeyPath<Base, U>)
      -> [Bool]
`Base`: `KeyPathIterable`에서 사용 가능
  • Base 의 특정 인스턴스에 있는 모든 텐서를 방문할 계획을 만듭니다. 이 계획은 구조적으로 동등한 Base 버전으로 이전 가능합니다.

    선언

    public init(_ obj: Base)