경고: 이 프로젝트는 더 이상 사용되지 않습니다. TensorFlow용 Swift는 머신 러닝, 컴파일러, 차별화 가능한 프로그래밍, 시스템 설계 등에 대한 최신 연구를 통합한 머신 러닝을 위한 차세대 플랫폼의 실험이었습니다. 2021년 2월에 보관되었습니다.

미분가능

public protocol Differentiable

접선 공간이 유한 차원인 미분 가능한 다양체를 수학적으로 나타내는 형식입니다.

  • 미분 가능한 값의 도함수를 나타내는 형식입니다.

    수학적으로 이것은 미분 유형으로 표현되는 미분 다양체의 접선 묶음과 같습니다.

    선언

    associatedtype TangentVector: Differentiable & AdditiveArithmetic
      where TangentVector.TangentVector == TangentVector
  • 이동의 self 주어진 방향을 따라. 리만 기하학, 이는 이동 지수 맵 동등 self 주어진 접선 벡터 따라 측지선 표면.

    선언

    mutating mutating func move(along direction: TangentVector)
  • 최소한의 필요한 정보를 포착 제로 접선 벡터를 생성하는 폐쇄 self .

    move(along: zeroTangentVectorInitializer()) 수정해서는 안 self .

    어떤 경우에는, 제로의 접선 벡터 self 동일하다 TangentVector.zero . 다른 경우에서, 제로의 접선 벡터의 정보에 따라 self 이러한 N 차원 어레이 타입의 형상대로. 미분 프로그램의 경우, 더 많은 메모리 효율적인 사용자 정의 정의하는 것입니다 zeroTangentVectorInitializer 캡처 및 용도에만 필요한 정보가 0 접선 벡터를 만들 수있는 폐쇄을 반환 속성을. 예를 들어:

    struct Vector {
        var scalars: [Float]
        var count: Int { scalars.count }
        init(scalars: [Float]) { ... }
        init(repeating repeatedElement: Float, count: Int) { ... }
    }
    
    extension Vector: AdditiveArithmetic { ... }
    
    extension Vector: Differentiable {
        typealias TangentVector = Vector
    
        @noDerivative
        var zeroTangentVectorInitializer: () -> TangentVector {
            let count = self.count
            return { TangentVector(repeating: 0, count: count) }
        }
    }
    

    선언

    var zeroTangentVectorInitializer: () -> TangentVector { get }
  • 제로탄젠트벡터

    확장 방법

    접선 벡터를 이용하여 초기화 zeroTangentVectorInitializer . move(along: zeroTangentVector) 수정해서는 안 self .

    선언

    var zeroTangentVector: TangentVector { get }
  • 선언

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • withDerivative(_:)

    확장 방법

    의 미분에 주어진 폐쇄 적용 self .

    반환 self 식별 기능이있다. 반환 값이 에 대해 구별되는 컨텍스트에서 사용되는 경우 반환 값의 파생물에 지정된 클로저를 적용합니다.

    선언

    @differentiable(wrt: self)
    func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
  • 순차(통과:_:)

    확장 방법

    반환 제 층의 입력되는 것을 제외하고는 이전 층의 출력 계층의 시퀀스를 적용하여 계산 된 출력 self .

    선언

    @differentiable
    public func sequenced<L1: Layer, L2: Layer>(through l1: L1, _ l2: L2) -> L2.Output
    where L1.Input == Self, L1.Output == L2.Input

    매개변수

    l1

    첫 번째 레이어입니다.

    l2

    두 번째 레이어입니다.

    반환 값

    순차 적용 후 최종 레이어의 출력.

  • 순차(통과:_:_:)

    확장 방법

    반환 제 층의 입력되는 것을 제외하고는 이전 층의 출력 계층의 시퀀스를 적용하여 계산 된 출력 self .

    선언

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer>(through l1: L1, _ l2: L2, _ l3: L3)
      -> L3.Output
    where L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input

    매개변수

    l1

    첫 번째 레이어입니다.

    l2

    두 번째 레이어입니다.

    l3

    세 번째 레이어입니다.

    반환 값

    순차적 적용 후 최종 레이어의 출력.

  • 순차(통과:_:_:_:)

    확장 방법

    반환 제 층의 입력되는 것을 제외하고는 이전 층의 출력 계층의 시퀀스를 적용하여 계산 된 출력 self .

    선언

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4
    ) -> L4.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input,
      L3.Output == L4.Input

    매개변수

    l1

    첫 번째 레이어입니다.

    l2

    두 번째 레이어입니다.

    l3

    세 번째 레이어입니다.

    l4

    네 번째 레이어.

    반환 값

    순차적 적용 후 최종 레이어의 출력.

  • 순차(통과:_:_:_:_:)

    확장 방법

    반환 제 층의 입력되는 것을 제외하고는 이전 층의 출력 계층의 시퀀스를 적용하여 계산 된 출력 self .

    선언

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer, L5: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4, _ l5: L5
    ) -> L5.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input, L3.Output == L4.Input,
      L4.Output == L5.Input

    매개변수

    l1

    첫 번째 레이어입니다.

    l2

    두 번째 레이어입니다.

    l3

    세 번째 레이어입니다.

    l4

    세 번째 레이어입니다.

    l5

    다섯 번째 레이어.

    반환 값

    순차 적용 후 최종 레이어의 출력.

  • 반환 제 층의 입력되는 것을 제외하고는 이전 층의 출력 계층의 시퀀스를 적용하여 계산 된 출력 self .

    선언

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer, L5: Layer, L6: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4, _ l5: L5, _ l6: L6
    ) -> L6.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input, L3.Output == L4.Input,
      L4.Output == L5.Input, L5.Output == L6.Input

    매개변수

    l1

    첫 번째 레이어입니다.

    l2

    두 번째 레이어입니다.

    l3

    세 번째 레이어입니다.

    l4

    세 번째 레이어입니다.

    l5

    다섯 번째 레이어.

    l6

    여섯 번째 레이어.

    반환 값

    순차적 적용 후 최종 레이어의 출력.