Keras - Lapisan Khusus

Keras memungkinkan untuk membuat lapisan kustom kita sendiri. Setelah lapisan baru dibuat, lapisan tersebut dapat digunakan di model apa pun tanpa batasan apa pun. Mari kita pelajari cara membuat layer baru di bab ini.

Keras menyediakan basis layerclass, Layer yang dapat disub-klasifikasikan untuk membuat lapisan kustom kita sendiri. Mari kita buat layer sederhana yang akan mencari bobot berdasarkan distribusi normal dan kemudian melakukan komputasi dasar untuk menemukan penjumlahan produk input dan bobotnya selama pelatihan.

Langkah 1: Impor modul yang diperlukan

Pertama, mari kita impor modul yang diperlukan -

from keras import backend as K 
from keras.layers import Layer

Sini,

  • backend digunakan untuk mengakses dot fungsi.

  • Layer adalah kelas dasar dan kami akan membuat sub-klasifikasinya untuk membuat lapisan kami

Langkah 2: Tentukan kelas lapisan

Mari kita buat kelas baru, MyCustomLayer dengan sub-klasifikasi Layer class -

class MyCustomLayer(Layer): 
   ...

Langkah 3: Inisialisasi kelas lapisan

Mari kita menginisialisasi kelas baru kita seperti yang ditentukan di bawah ini -

def __init__(self, output_dim, **kwargs):    
   self.output_dim = output_dim 
   super(MyCustomLayer, self).__init__(**kwargs)

Sini,

  • Line 2 mengatur dimensi keluaran.

  • Line 3 memanggil base atau lapisan super init fungsi.

Langkah 4: Terapkan metode build

buildadalah metode utama dan satu-satunya tujuan adalah membangun lapisan dengan benar. Itu bisa melakukan apa saja yang berhubungan dengan kerja bagian dalam lapisan. Setelah fungsionalitas kustom selesai, kita dapat memanggil kelas dasarbuildfungsi. Kebiasaan kamibuild fungsinya adalah sebagai berikut -

def build(self, input_shape): 
   self.kernel = self.add_weight(name = 'kernel', 
      shape = (input_shape[1], self.output_dim), 
      initializer = 'normal', trainable = True) 
   super(MyCustomLayer, self).build(input_shape)

Sini,

  • Line 1 mendefinisikan build metode dengan satu argumen, input_shape. Bentuk dari input data disebut dengan input_shape.

  • Line 2membuat bobot yang sesuai dengan bentuk masukan dan mengaturnya di kernel. Ini adalah fungsi kustom lapisan kami. Ini menciptakan bobot menggunakan penginisialisasi 'normal'.

  • Line 6 memanggil kelas dasar, build metode.

Langkah 5: Terapkan metode panggilan

call metode melakukan kerja lapisan yang tepat selama proses pelatihan.

Kebiasaan kami call metode adalah sebagai berikut

def call(self, input_data): 
   return K.dot(input_data, self.kernel)

Sini,

  • Line 1 mendefinisikan call metode dengan satu argumen, input_data. input_data adalah data masukan untuk lapisan kita.

  • Line 2 mengembalikan produk titik dari data masukan, input_data dan kernel lapisan kami, self.kernel

Langkah 6: Terapkan metode compute_output_shape

def compute_output_shape(self, input_shape): return (input_shape[0], self.output_dim)

Sini,

  • Line 1 mendefinisikan compute_output_shape metode dengan satu argumen input_shape

  • Line 2 menghitung bentuk keluaran menggunakan bentuk data masukan dan set dimensi keluaran saat menginisialisasi lapisan.

Menerapkan build, call dan compute_output_shapemenyelesaikan pembuatan lapisan yang disesuaikan. Kode terakhir dan lengkapnya adalah sebagai berikut

from keras import backend as K from keras.layers import Layer
class MyCustomLayer(Layer): 
   def __init__(self, output_dim, **kwargs): 
      self.output_dim = output_dim 
      super(MyCustomLayer, self).__init__(**kwargs) 
   def build(self, input_shape): self.kernel = 
      self.add_weight(name = 'kernel', 
      shape = (input_shape[1], self.output_dim), 
      initializer = 'normal', trainable = True) 
      super(MyCustomLayer, self).build(input_shape) # 
      Be sure to call this at the end 
   def call(self, input_data): return K.dot(input_data, self.kernel) 
   def compute_output_shape(self, input_shape): return (input_shape[0], self.output_dim)

Menggunakan lapisan khusus kami

Mari kita buat model sederhana menggunakan layer yang kita sesuaikan seperti yang ditentukan di bawah ini -

from keras.models import Sequential 
from keras.layers import Dense 

model = Sequential() 
model.add(MyCustomLayer(32, input_shape = (16,))) 
model.add(Dense(8, activation = 'softmax')) model.summary()

Sini,

  • Kami MyCustomLayer ditambahkan ke model menggunakan 32 unit dan (16,) sebagai bentuk masukan

Menjalankan aplikasi akan mencetak ringkasan model seperti di bawah ini -

Model: "sequential_1" 
_________________________________________________________________ 
Layer (type) Output Shape Param 
#================================================================ 
my_custom_layer_1 (MyCustomL (None, 32) 512 
_________________________________________________________________
dense_1 (Dense) (None, 8) 264 
================================================================= 
Total params: 776 
Trainable params: 776 
Non-trainable params: 0 
_________________________________________________________________