Keras - Lớp tùy chỉnh
Keras cho phép tạo lớp tùy chỉnh của riêng chúng tôi. Khi một lớp mới được tạo, nó có thể được sử dụng trong bất kỳ mô hình nào mà không bị hạn chế. Hãy để chúng tôi tìm hiểu cách tạo lớp mới trong chương này.
Keras cung cấp một cơ sở layerlớp, Lớp có thể phân lớp để tạo lớp tùy chỉnh của riêng chúng ta. Chúng ta hãy tạo một lớp đơn giản sẽ tìm trọng lượng dựa trên phân phối chuẩn và sau đó thực hiện phép tính cơ bản để tìm tổng của tích đầu vào và trọng lượng của nó trong quá trình luyện tập.
Bước 1: Nhập mô-đun cần thiết
Trước tiên, hãy để chúng tôi nhập các mô-đun cần thiết -
from keras import backend as K
from keras.layers import Layer
Đây,
backend được sử dụng để truy cập dot chức năng.
Layer là lớp cơ sở và chúng tôi sẽ phân lớp nó để tạo lớp của chúng tôi
Bước 2: Xác định một lớp lớp
Hãy để chúng tôi tạo một lớp học mới, MyCustomLayer bằng cách phân loại phụ Layer class -
class MyCustomLayer(Layer):
...
Bước 3: Khởi tạo lớp lớp
Hãy để chúng tôi khởi tạo lớp mới của chúng tôi như được chỉ định bên dưới:
def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
super(MyCustomLayer, self).__init__(**kwargs)
Đây,
Line 2 đặt thứ nguyên đầu ra.
Line 3 gọi cơ sở hoặc siêu lớp của init chức năng.
Bước 4: Thực hiện phương pháp xây dựng
buildlà phương thức chính và mục đích duy nhất của nó là xây dựng lớp đúng cách. Nó có thể làm bất cứ điều gì liên quan đến hoạt động bên trong của lớp. Khi chức năng tùy chỉnh được thực hiện xong, chúng ta có thể gọi lớp cơ sởbuildchức năng. Tùy chỉnh của chúng tôibuild chức năng như sau:
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)
Đây,
Line 1 xác định build phương pháp với một đối số, input_shape. Hình dạng của dữ liệu đầu vào được tham chiếu bởi input_shape.
Line 2tạo trọng số tương ứng với hình dạng đầu vào và đặt nó trong nhân. Đây là chức năng tùy chỉnh của chúng tôi về lớp. Nó tạo ra trọng số bằng cách sử dụng bộ khởi tạo 'bình thường'.
Line 6 gọi lớp cơ sở, build phương pháp.
Bước 5: Triển khai phương thức gọi
call phương pháp làm việc chính xác của lớp trong quá trình đào tạo.
Tùy chỉnh của chúng tôi call phương pháp như sau
def call(self, input_data):
return K.dot(input_data, self.kernel)
Đây,
Line 1 xác định call phương pháp với một đối số, input_data. input_data là dữ liệu đầu vào cho lớp của chúng ta.
Line 2 trả về sản phẩm dấu chấm của dữ liệu đầu vào, input_data và hạt nhân của lớp của chúng tôi, self.kernel
Bước 6: Triển khai phương thức compute_output_shape
def compute_output_shape(self, input_shape): return (input_shape[0], self.output_dim)
Đây,
Line 1 xác định compute_output_shape phương pháp với một đối số input_shape
Line 2 tính toán hình dạng đầu ra bằng cách sử dụng hình dạng của dữ liệu đầu vào và kích thước đầu ra được đặt trong khi khởi tạo lớp.
Thực hiện build, call và compute_output_shapehoàn thành việc tạo một lớp tùy chỉnh. Mã cuối cùng và hoàn chỉnh như sau
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)
Sử dụng lớp tùy chỉnh của chúng tôi
Hãy để chúng tôi tạo một mô hình đơn giản bằng cách sử dụng lớp tùy chỉnh của chúng tôi như được chỉ định bên dưới -
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()
Đây,
Của chúng tôi MyCustomLayer được thêm vào mô hình bằng cách sử dụng 32 đơn vị và (16,) như hình dạng đầu vào
Chạy ứng dụng sẽ in tóm tắt mô hình như dưới đây:
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
_________________________________________________________________