Bài 10: Models - Keras cơ bản

Đăng bởi: Admin | Lượt xem: 125 | Chuyên mục: AI


Như ta đã tìm hiểu trong các bài trước, mô hình Keras đại diện cho mô hình mạng nơron thực tế. Keras cung cấp hai chế độ để tạo mô hình, API tuần tự đơn giản và dễ sử dụng cũng như API chức năng linh hoạt và nâng cao hơn. Bây giờ ta hãy học cách tạo mô hình bằng cách sử dụng cả API tuần tự và hàm trong chương này.

1. Sequential :

Ý tưởng cốt lõi của Sequential API chỉ đơn giản là sắp xếp các lớp Keras theo thứ tự tuần tự và vì vậy, nó được gọi là Sequential API. Hầu hết ANN cũng có các lớp theo thứ tự tuần tự và dữ liệu chảy từ lớp này sang lớp khác theo thứ tự nhất định cho đến khi dữ liệu cuối cùng đến lớp đầu ra.
Mô hình ANN có thể được tạo bằng cách chỉ cần gọi API Sequential () như sau :
from keras.models import Sequential 
model = Sequential()
a. Thêm layers:
Để thêm layer, chỉ cần tạo một lớp bằng API lớp Keras và sau đó chuyển layer qua hàm add () như sau :
from keras.models import Sequential 

model = Sequential() 
input_layer = Dense(32, input_shape=(8,)) model.add(input_layer) 
hidden_layer = Dense(64, activation='relu'); model.add(hidden_layer) 
output_layer = Dense(8) 
model.add(output_layer)
Ở đây, ta đã tạo một input, một hiden và một output.
b. Truy câp model
Keras cung cấp một số phương pháp để lấy thông tin mô hình như các layer, dữ liệu đầu vào và dữ liệu đầu ra như sau :
  • model.layers - Trả về tất cả các lớp của mô hình dưới dạng danh sách.
>>> layers = model.layers 
>>> layers 
[
   <keras.layers.core.Dense object at 0x000002C8C888B8D0>, 
   <keras.layers.core.Dense object at 0x000002C8C888B7B8>
   <keras.layers.core.Dense object at 0x 000002C8C888B898>
]
  • model.inputs - Trả về tất cả các tensors đầu vào của mô hình dưới dạng danh sách.
>>> inputs = model.inputs 
>>> inputs 
[<tf.Tensor 'dense_13_input:0' shape=(?, 8) dtype=float32>]
  • model.outputs - Trả về tất cả các tensors đầu ra của mô hình dưới dạng danh sách.
>>> outputs = model.outputs 
>>> outputs 
<tf.Tensor 'dense_15/BiasAdd:0' shape=(?, 8) dtype=float32>]
  • model.get_weights − Trả về tất cả các trọng số dưới dạng mảng NumPy.
  • model.set_weights(weight_numpy_array) − Đặt trọng số của mô hình.
c. Serialize model
Keras cung cấp các phương thức để tuần tự hóa mô hình thành đối tượng cũng như json và tải lại sau đó:
  • get_config () - Trả về mô hình dưới dạng một đối tượng.
config = model.get_config()
  • from_config () - Nó chấp nhận đối tượng cấu hình mô hình làm đối số và tạo mô hình tương ứng.
new_model = Sequential.from_config(config)
  • to_json () - Trả về mô hình dưới dạng một đối tượng json.
>>> json_string = model.to_json() 
>>> json_string '{"class_name": "Sequential", "config": 
{"name": "sequential_10", "layers": 
[{"class_name": "Dense", "config": 
{"name": "dense_13", "trainable": true, "batch_input_shape": 
[null, 8], "dtype": "float32", "units": 32, "activation": "linear", 
"use_bias": true, "kernel_initializer": 
{"class_name": "Vari anceScaling", "config": 
{"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}},
"bias_initializer": {"class_name": "Zeros", "conf 
ig": {}}, "kernel_regularizer": null, "bias_regularizer": null, 
"activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, 
{" class_name": "Dense", "config": {"name": "dense_14", "trainable": true, 
"dtype": "float32", "units": 64, "activation": "relu", "use_bias": true, 
"kern el_initializer": {"class_name": "VarianceScaling", "config": 
{"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, 
"bias_initia lizer": {"class_name": "Zeros", 
"config": {}}, "kernel_regularizer": null, "bias_regularizer": null, 
"activity_regularizer": null, "kernel_constraint" : null, "bias_constraint": null}}, 
{"class_name": "Dense", "config": {"name": "dense_15", "trainable": true, 
"dtype": "float32", "units": 8, "activation": "linear", "use_bias": true, 
"kernel_initializer": {"class_name": "VarianceScaling", "config": 
{"scale": 1.0, "mode": "fan_avg", "distribution": " uniform", "seed": null}}, 
"bias_initializer": {"class_name": "Zeros", "config": {}}, 
"kernel_regularizer": null, "bias_regularizer": null, "activity_r egularizer": 
null, "kernel_constraint": null, "bias_constraint": 
null}}]}, "keras_version": "2.2.5", "backend": "tensorflow"}' 
>>>
  • model_from_json () - Chấp nhận biểu diễn json của mô hình và tạo một mô hình mới.
from keras.models import model_from_json 
new_model = model_from_json(json_string)
  • to_yaml () - Trả về mô hình dưới dạng một chuỗi yaml.
>>> yaml_string = model.to_yaml() 
>>> yaml_string 'backend: tensorflow\nclass_name: 
Sequential\nconfig:\n layers:\n - class_name: Dense\n config:\n 
activation: linear\n activity_regular izer: null\n batch_input_shape: 
!!python/tuple\n - null\n - 8\n bias_constraint: null\n bias_initializer:\n 
class_name : Zeros\n config: {}\n bias_regularizer: null\n dtype: 
float32\n kernel_constraint: null\n 
kernel_initializer:\n cla ss_name: VarianceScaling\n config:\n 
distribution: uniform\n mode: fan_avg\n 
scale: 1.0\n seed: null\n kernel_regularizer: null\n name: dense_13\n 
trainable: true\n units: 32\n 
use_bias: true\n - class_name: Dense\n config:\n activation: relu\n activity_regularizer: null\n 
bias_constraint: null\n bias_initializer:\n class_name: Zeros\n 
config : {}\n bias_regularizer: null\n dtype: float32\n 
kernel_constraint: null\n kernel_initializer:\n class_name: VarianceScalin g\n 
config:\n distribution: uniform\n mode: fan_avg\n scale: 1.0\n 
seed: null\n kernel_regularizer: nu ll\n name: dense_14\n trainable: true\n 
units: 64\n use_bias: true\n - class_name: Dense\n config:\n 
activation: linear\n activity_regularizer: null\n 
bias_constraint: null\n bias_initializer:\n 
class_name: Zeros\n config: {}\n bias_regu larizer: null\n 
dtype: float32\n kernel_constraint: null\n 
kernel_initializer:\n class_name: VarianceScaling\n config:\n 
distribution: uniform\n mode: fan_avg\n 
scale: 1.0\n seed: null\n kernel_regularizer: null\n name: dense _15\n 
trainable: true\n units: 8\n 
use_bias: true\n name: sequential_10\nkeras_version: 2.2.5\n' 
>>>
  • model_from_yaml () - Chấp nhận biểu diễn yaml của mô hình và tạo một mô hình mới.
from keras.models import model_from_yaml 
new_model = model_from_yaml(yaml_string)
d. Tổng quan về model
Hiểu được mô hình là giai đoạn rất quan trọng để sử dụng đúng cách cho mục đích đào tạo và dự đoán. Keras cung cấp một phương pháp đơn giản, tóm tắt để có được thông tin đầy đủ về mô hình và các layer.
Tóm tắt về mô hình được tạo trong phần trước như sau:
>>> model.summary() Model: "sequential_10" 
_________________________________________________________________ 
Layer (type) Output Shape Param 
#================================================================ 
dense_13 (Dense) (None, 32) 288 
_________________________________________________________________ 
dense_14 (Dense) (None, 64) 2112 
_________________________________________________________________ 
dense_15 (Dense) (None, 8) 520 
================================================================= 
Total params: 2,920 
Trainable params: 2,920 
Non-trainable params: 0 
_________________________________________________________________ 
>>>
e. Huấn luyện và dự đoán Model
Mô hình cung cấp chức năng cho quá trình huấn luyện, đánh giá và dự đoán như sau
  • compile − Định cấu hình quá trình học tập của mô hình
  • fit − Đào tạo mô hình bằng cách sử dụng dữ liệu đào tạo
  • evaluate − Đánh giá mô hình bằng cách sử dụng dữ liệu test
  • predict − Dự đoán kết quả với dữ liệu đầu vào mới

2. Functional API

API tuần tự được sử dụng để tạo mô hình theo từng lớp.Functional API  là một cách tiếp cận thay thế để tạo ra các mô hình phức tạp hơn. Mô hình Functional, bạn có thể xác định nhiều đầu vào hoặc đầu ra chia sẻ các lớp. Đầu tiên, chúng ta tạo một thể hiện cho mô hình và kết nối với các lớp để truy cập đầu vào và đầu ra của mô hình. Sau đây giải thích ngắn gọn về mô hình chức năng.
a. Tạo model
Import 1 layer input:
>>> from keras.layers import Input
Tạo một layer đầu vào chỉ định hình dạng kích thước đầu vào cho mô hình như sau:
>>> data = Input(shape=(2,3))
Xác định layer đầu vào :
>>> from keras.layers import Dense
Thêm layer Dense cho dữ liệu đầu vào :
>>> layer = Dense(2)(data) 
>>> print(layer) 
Tensor("dense_1/add:0", shape =(?, 2, 2), dtype = float32)
Xác định Model:
from keras.models import Model
Tạo một mô hình bằng cách chỉ định cả lớp đầu vào và đầu ra -
model = Model(inputs = data, outputs = layer)
Toàn bộ code quá trình tạo model đơn giản như sau :
from keras.layers import Input 
from keras.models import Model 
from keras.layers import Dense 

data = Input(shape=(2,3)) 
layer = Dense(2)(data) model = 
Model(inputs=data,outputs=layer) model.summary() 
_________________________________________________________________ 
Layer (type)               Output Shape               Param # 
================================================================= 
input_2 (InputLayer)       (None, 2, 3)               0 
_________________________________________________________________ 
dense_2 (Dense)            (None, 2, 2)               8 
================================================================= 
Total params: 8 
Trainable params: 8 
Non-trainable params: 0 
_________________________________________________________________
Bài tiếp theo: Tổng hợp Model (Phần 1) >>
vncoder logo

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!