Слои

Поскольку Tensor является нашим фундаментальным строительным блоком для ускоренных параллельных вычислений, большинство моделей и операций машинного обучения будут выражаться в терминах протокола Layer . Layer определяет интерфейс для типов, которые принимают дифференцируемые входные данные, обрабатывают их и создают дифференцируемые выходные данные. Layer может содержать состояние, например обучаемые веса.

Layer — это усовершенствованная версия протокола Module , где Module определяет более общий случай, когда входные данные типа не обязательно дифференцируемы. Большинство компонентов модели будут иметь дело с дифференцируемыми входными данными, но бывают случаи, когда вместо этого может потребоваться соответствие типов Module .

Если вы создаете операцию, в которой нет обучаемых параметров, вам нужно будет определить ее с помощью ParameterlessLayer вместо Layer .

Сами модели часто определяются как 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 ...
  }
}

Обучаемые компоненты Layers , такие как веса и смещения, а также другие Layer , могут быть объявлены как свойства. Пользовательский инициализатор — хорошее место для предоставления настраиваемых параметров модели, таких как переменное количество слоев или выходной размер модели классификации. Наконец, ядром Layer является callAsFunction() , где вы определите типы ввода и вывода, а также преобразование, которое принимает одно и возвращает другое.

Встроенные слои

Многие распространенные операции машинного обучения инкапсулированы в виде Layer , которые вы можете использовать при определении моделей или подразделений. Ниже приведен список слоев, предоставляемых Swift для TensorFlow, сгруппированных по функциональным областям:

Увеличение

Свертка

Встраивание

Морфологический

Нормализация

Объединение

Рекуррентные нейронные сети

Изменение формы

Повышение дискретизации

Оптимизаторы

Оптимизаторы — ключевой компонент обучения модели машинного обучения, обновляющий модель на основе рассчитанного градиента. В идеале эти обновления будут корректировать параметры модели таким образом, чтобы ее можно было обучить.

Чтобы использовать оптимизатор, сначала инициализируйте его для целевой модели с соответствующими параметрами обучения:

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

Обучите модель, получив градиент по отношению к входным данным и функции потерь, а затем обновите модель по этому градиенту с помощью оптимизатора:

optimizer.update(&model, along: gradients)

Встроенные оптимизаторы

Swift для TensorFlow предоставляет несколько распространенных оптимизаторов. К ним относятся следующие: