Katmanlar

Tensor hızlandırılmış paralel hesaplama için temel yapı taşımız olması gibi, çoğu makine öğrenimi modeli ve işlemi de Layer protokolü cinsinden ifade edilecektir. Layer , türevlenebilir bir girdi alan, bunu işleyen ve türevlenebilir bir çıktı üreten türler için bir arayüz tanımlar. Bir Layer , eğitilebilir ağırlıklar gibi durumu içerebilir.

Layer , Module protokolünün geliştirilmiş halidir; Module türe yönelik girdinin mutlaka ayırt edilebilir olmadığı daha genel durumu tanımlar. Bir modeldeki bileşenlerin çoğu, türevlenebilir girdilerle ilgilenir, ancak türlerin bunun yerine Module uymasının gerekebileceği durumlar vardır.

Bir işlem oluşturursanız, içinde eğitilebilir parametreler bulunmuyorsa, onu Layer yerine ParameterlessLayer cinsinden tanımlamak isteyeceksiniz.

Modellerin kendisi genellikle Layer olarak tanımlanır ve düzenli olarak diğer Layer oluşur. Layer olarak tanımlanan bir model veya alt birim, diğer herhangi bir Layer gibi ele alınabilir ve bu, diğer modellerden veya alt birimlerden keyfi olarak karmaşık modellerin oluşturulmasına olanak tanır.

Kendinize ait bir model veya operasyon için özel bir Layer tanımlamak amacıyla genellikle buna benzer bir şablonu izleyeceksiniz:

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 ağırlıklar ve önyargılar gibi eğitilebilir bileşenlerinin yanı sıra diğer Layer da özellik olarak bildirilebilir. Özel bir başlatıcı, değişken sayıda katman veya bir sınıflandırma modelinin çıktı boyutu gibi bir modele yönelik özelleştirilebilir parametreleri ortaya çıkarmak için iyi bir yerdir. Son olarak, Layer çekirdeği callAsFunction() dır; burada giriş ve çıkış türlerinin yanı sıra birini alıp diğerini döndüren dönüşümü tanımlayacaksınız.

Yerleşik katmanlar

Birçok yaygın makine öğrenimi işlemi, modelleri veya alt birimleri tanımlarken kullanmanız için Layer olarak kapsüllenmiştir. Aşağıda Swift tarafından TensorFlow için sağlanan katmanların işlevsel alanlara göre gruplandırılmış bir listesi yer almaktadır:

Büyütme

Evrişim

Gömme

Morfolojik

Normalleştirme

Havuzlama

Tekrarlayan sinir ağları

Yeniden şekillendirme

Üst örnekleme

Optimize ediciler

Optimize ediciler, makine öğrenimi modelinin eğitiminin önemli bir bileşenidir ve modeli hesaplanan bir eğime göre günceller. Bu güncellemeler ideal olarak bir modelin parametrelerini modeli eğitecek şekilde ayarlayacaktır.

Bir optimize edici kullanmak için öncelikle onu uygun eğitim parametreleriyle bir hedef model için başlatın:

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

Girişe ve kayıp fonksiyonuna göre bir degrade elde ederek bir modeli eğitin ve ardından optimize edicinizi kullanarak modeli bu degrade boyunca güncelleyin:

optimizer.update(&model, along: gradients)

Yerleşik optimize ediciler

TensorFlow için Swift tarafından çeşitli yaygın optimize ediciler sağlanmaktadır. Bunlar aşağıdakileri içerir: