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
- Dönüşüm1D
- Dönüşüm2D
- Dönüşüm3D
- Yoğun
- DepthwiseConv2D
- AyrılabilirConv1D
- AyrılabilirConv2D
- TranspozeConv1D
- TranspozeConv2D
- TranspozeConv3D
- ZeroPadding1D
- ZeroPadding2D
- Sıfır Dolgu3D
Gömme
Morfolojik
Normalleştirme
Havuzlama
- OrtHavuz1D
- OrtHavuz2D
- OrtHavuz3D
- MaxPool1D
- MaxPool2D
- MaxPool3D
- FraksiyonelMaxPool2D
- Küresel AvgPool1D
- Küresel AvgPool2D
- Küresel AvgPool3D
- GlobalMaxPool1D
- GlobalMaxPool2D
- GlobalMaxPool3D
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: