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
_________________________________________________________________