레이어

Tensor 가속화된 병렬 계산을 위한 기본 구성 요소인 것처럼 대부분의 기계 학습 모델과 작업은 Layer 프로토콜 측면에서 표현됩니다. Layer 미분 가능한 입력을 받아 처리하고 미분 가능한 출력을 생성하는 유형에 대한 인터페이스를 정의합니다. Layer 학습 가능한 가중치와 같은 상태가 포함될 수 있습니다.

Layer Module 프로토콜을 개선한 것입니다. Module 유형에 대한 입력이 반드시 구별 가능하지 않은 보다 일반적인 경우를 정의합니다. 모델의 대부분의 구성 요소는 미분 가능한 입력을 처리하지만 유형이 Module 준수해야 하는 경우가 있습니다.

훈련 가능한 매개변수가 없는 작업을 생성하는 경우 Layer 대신 ParameterlessLayer 사용하여 정의하는 것이 좋습니다.

모델 자체는 종종 Layer 로 정의되며, 정기적으로 다른 Layer 로 구성됩니다. Layer 로 정의된 모델이나 하위 유닛은 다른 Layer 와 마찬가지로 처리될 수 있으므로 다른 모델이나 하위 유닛에서 임의로 복잡한 모델을 구성할 수 있습니다.

자신만의 모델이나 작업에 대한 사용자 정의 Layer 정의하려면 일반적으로 다음과 유사한 템플릿을 따릅니다.

public struct MyModel: Layer {
  // Define your layers or other properties here.

  // A custom initializer may be desired to configure the model.
  public init() {}

  @differentiable
  public func callAsFunction(_ input: Tensor<Float>) -> Tensor<Float> {
    // Define the sequence of operations performed on model input to arrive at the output.
    return ...
  }
}

가중치, 편향 및 기타 Layer 와 같은 Layers 의 훈련 가능한 구성요소는 속성으로 선언될 수 있습니다. 사용자 정의 이니셜라이저는 다양한 레이어 수 또는 분류 모델의 출력 크기와 같은 모델에 대한 사용자 정의 가능한 매개변수를 노출하기에 좋은 장소입니다. 마지막으로 Layer 의 핵심은 callAsFunction() 입니다. 여기서는 입력과 출력에 대한 유형과 하나를 취하고 다른 하나를 반환하는 변환을 정의합니다.

내장 레이어

모델이나 하위 유닛을 정의할 때 사용할 수 있도록 많은 일반적인 기계 학습 작업이 Layer 로 캡슐화되었습니다. 다음은 기능 영역별로 그룹화된 Swift for TensorFlow에서 제공하는 레이어 목록입니다.

증가

회선

임베딩

형태학적

표준화

풀링

순환 신경망

재형성

업샘플링

옵티마이저

옵티마이저는 계산된 기울기를 기반으로 모델을 업데이트하는 기계 학습 모델 교육의 핵심 구성 요소입니다. 이러한 업데이트는 이상적으로 모델을 훈련하는 방식으로 모델의 매개변수를 조정합니다.

옵티마이저를 사용하려면 먼저 적절한 훈련 매개변수를 사용하여 대상 모델에 대해 초기화하십시오.

let optimizer = RMSProp(for: model, learningRate: 0.0001, decay: 1e-6)

입력 및 손실 함수에 대한 기울기를 얻어 모델을 학습한 다음 최적화 프로그램을 사용하여 해당 기울기에 따라 모델을 업데이트합니다.

optimizer.update(&model, along: gradients)

내장된 최적화 프로그램

Swift for TensorFlow에서는 몇 가지 일반적인 최적화 프로그램을 제공합니다. 여기에는 다음이 포함됩니다.