- Bài 1: Giới thiệu
- Bài 2: Cài đặt
- Bài 3: Cấu hình backend
- Bài 4: Tổng quan về Deep learning
- Bài 5: Deep learning
- Bài 6: Mô đun
- Bài 7: Layers (phần 1)
- Bài 8: Layers (Phần 2)
- Bài 9: Tuỳ chỉnh Layer
- Bài 10: Models
- Bài 11: Tổng hợp Model (Phần 1)
- Bài 12: Tổng hợp Model (Phần 2)
- Bài 13: Đánh giá và dự đoán mô hình
- Bài 14: Convolution Neural Network
- Bài 15: Dự đoán hồi quy sử dụng MPL
- Bài 16: Dự đoán chuỗi thời gian bằng LSTM RNN
- Bài 17: Ứng dụng
- Bài 18: Dự đoán thời gian thực với mô hình ResNet
- Bài 19: Pre-Trained Models
Bài 9: Tuỳ chỉnh Layer - Keras cơ bản
Đăng bởi: Admin | Lượt xem: 2495 | Chuyên mục: AI
Keras cho phép tạo layer tùy chỉnh riêng. Khi một layer mới được tạo, nó có thể được sử dụng trong bất kỳ mô hình nào mà không có bất kỳ hạn chế nào. Ta sẽ tìm hiểu cách tạo layer trong bài hôm nay.
Keras cung cấp một lớp layer cơ sở. Layer có thể phân lớp để tạo layer tùy chỉnh riêng. Ta hãy tạo một layer đơn giản và tìm trọng số(weight) dựa trên phân phối chuẩn , 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 số của nó trong quá trình luyện tập.
Bước 1 : Import các thư viện cần thiết :
from keras import backend as K
from keras.layers import Layer
Trong đó :
- backend được sử dụng để truy cập hàm dot.
- Layer là lớp cơ sở sẽ phân lớp nó để tạo lớp riêng
Bước 2: Xác định lớp layer :
Tạo lớp mới MyCustomLayer
class MyCustomLayer(Layer):
...
Bước 3 : Khởi tạo lớp layer
def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
super(MyCustomLayer, self).__init__(**kwargs)
Trong đó :
- Dòng 2 đặt số chiều đầu ra.
- Line 3 cgọi hàm init .
Bước 4: Xây dựng phương thức
xây dựng(build) là phương pháp chính và mục đích duy nhất của nó là xây dựng layer đú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 layer. Khi hàm tuỳ chỉnh được thực hiện xong, ta có thể gọi hàm xây dựng layer cơ sở. Hàm xây dựng tùy chỉnh của chúng tôi 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)
Trong đó :
- Dòng 1 xác định phương thức xây dựng 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.
- Dòng 2 tạo ra trọng số tương ứng với hình dạng đầu vào và đặt trong kernal. Nó tạo ra trọng số bằng cách sử dụng bộ khởi tạo ‘normal’.
- Dòng 6 gọi lớp cơ sở, phương thức xây dựng.
Bước 5: Phương thức call :
Call là phương pháp làm việc chính xác của layer trong quá trình đào tạo.
def call(self, input_data):
return K.dot(input_data, self.kernel)
Trong đó :
- Dòng 1 xác định phương thức gọi với một đối số, input_data. input_data là dữ liệu đầu vào cho layer.
- Dòng 2 trả về dot của dữ liệu đầu vào, input_data và kernal ,self.kernel
Bước 6: Phương thức compute_output_shape:
def compute_output_shape(self, input_shape): return (input_shape[0], self.output_dim)
Trong đó :
- Dòng 1 xác định phương thức compute_output_shape với một đối số input_shape
- Line 2 tính toán shape output bằng cách sử dụng shape 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.
Việc triển khai built, call và compute_output_shape hoàn tất việc tạo một layer tùy chỉnh.Đoạn code mẫu 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 layer tuỳ chỉnh :
Tạo một mô hình đơn giản bằng cách sử dụng layer tùy chỉnh như sau:
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()
Trong đó :
MyCustomLayer được thêm vào mô hình bằng cách sử dụng 32 units và (16,) làm shape input
Kết quả sau khi chạy mô hình như sau :
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
__________________________
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!
- Bài 1: Giới thiệu
- Bài 2: Cài đặt
- Bài 3: Cấu hình backend
- Bài 4: Tổng quan về Deep learning
- Bài 5: Deep learning
- Bài 6: Mô đun
- Bài 7: Layers (phần 1)
- Bài 8: Layers (Phần 2)
- Bài 9: Tuỳ chỉnh Layer
- Bài 10: Models
- Bài 11: Tổng hợp Model (Phần 1)
- Bài 12: Tổng hợp Model (Phần 2)
- Bài 13: Đánh giá và dự đoán mô hình
- Bài 14: Convolution Neural Network
- Bài 15: Dự đoán hồi quy sử dụng MPL
- Bài 16: Dự đoán chuỗi thời gian bằng LSTM RNN
- Bài 17: Ứng dụng
- Bài 18: Dự đoán thời gian thực với mô hình ResNet
- Bài 19: Pre-Trained Models