Sama seperti Tensor
yang merupakan elemen dasar kami untuk mempercepat komputasi paralel, sebagian besar model dan operasi pembelajaran mesin akan dinyatakan dalam protokol Layer
. Layer
mendefinisikan antarmuka untuk tipe yang mengambil masukan terdiferensiasi, memprosesnya, dan menghasilkan keluaran terdiferensiasi. Sebuah Layer
dapat berisi keadaan, seperti beban yang dapat dilatih.
Layer
adalah penyempurnaan dari protokol Module
, dengan Module
yang mendefinisikan kasus yang lebih umum di mana masukan ke suatu tipe belum tentu dapat dibedakan. Sebagian besar komponen dalam model akan menangani input yang dapat dibedakan, namun ada kasus di mana tipe mungkin perlu menyesuaikan dengan Module
.
Jika Anda membuat operasi yang tidak memiliki parameter yang dapat dilatih di dalamnya, Anda dapat mendefinisikannya dalam ParameterlessLayer
, bukan Layer
.
Model sendiri sering didefinisikan sebagai Layer
s, dan secara teratur terdiri dari Layer
s lainnya. Model atau subunit yang telah didefinisikan sebagai Layer
dapat diperlakukan sama seperti Layer
lainnya, sehingga memungkinkan konstruksi model kompleks yang sewenang-wenang dari model atau subunit lain.
Untuk menentukan Layer
khusus untuk model atau operasi Anda sendiri, biasanya Anda akan mengikuti templat yang mirip dengan ini:
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 ...
}
}
Komponen Layers
yang dapat dilatih, seperti bobot dan bias, serta Layer
lainnya, dapat dideklarasikan sebagai properti. Penginisialisasi khusus adalah tempat yang baik untuk mengekspos parameter yang dapat disesuaikan untuk suatu model, seperti jumlah lapisan yang bervariasi atau ukuran keluaran model klasifikasi. Terakhir, inti dari Layer
adalah callAsFunction()
, di mana Anda akan menentukan tipe input dan output serta transformasi yang mengambil satu dan mengembalikan yang lain.
Lapisan bawaan
Banyak operasi pembelajaran mesin umum telah dienkapsulasi sebagai Layer
untuk Anda gunakan saat menentukan model atau subunit. Berikut ini adalah daftar lapisan yang disediakan Swift untuk TensorFlow, dikelompokkan berdasarkan area fungsional:
Augmentasi
Lilitan
- Konv1D
- Konv2D
- Konv3D
- Padat
- Konv2D Mendalam
- Konv1D yang Dapat Dipisahkan
- Konv2D yang Dapat Dipisahkan
- Konv1D yang Ditransposisikan
- TransposisiConv2D
- TransposisiConv3D
- ZeroPadding1D
- ZeroPadding2D
- ZeroPadding3D
Penyematan
Secara morfologi
Normalisasi
Penggabungan
- Rata-Rata Kolam Renang1D
- Rata-rata Kolam2D
- Rata-Rata Kolam Renang3D
- MaxPool1D
- MaxPool2D
- MaxPool3D
- FraksionalMaxPool2D
- Rata-Rata Global1D
- Rata-Rata Global2D
- Rata-Rata Global3D
- GlobalMaxPool1D
- GlobalMaxPool2D
- GlobalMaxPool3D
Jaringan saraf berulang
Membentuk kembali
Pengambilan sampel
Pengoptimal
Pengoptimal adalah komponen kunci dalam pelatihan model pembelajaran mesin, memperbarui model berdasarkan gradien yang dihitung. Pembaruan ini idealnya akan menyesuaikan parameter model sedemikian rupa untuk melatih model tersebut.
Untuk menggunakan pengoptimal, pertama-tama inisialisasi pengoptimal untuk model target dengan parameter pelatihan yang sesuai:
let optimizer = RMSProp(for: model, learningRate: 0.0001, decay: 1e-6)
Latih model dengan mendapatkan gradien sehubungan dengan input dan fungsi kerugian, lalu perbarui model sepanjang gradien tersebut menggunakan pengoptimal Anda:
optimizer.update(&model, along: gradients)
Pengoptimal bawaan
Beberapa pengoptimal umum disediakan oleh Swift untuk TensorFlow. Ini termasuk yang berikut: