Lapisan

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

Penyematan

Secara morfologi

Normalisasi

Penggabungan

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: