Keras - Người mẫu

Như đã học 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ờ chúng ta hãy học cách tạo mô hình bằng cách sử dụng cả API tuần tựhàm trong chương này.

Tuần tự

Ý tưởng cốt lõi của Sequential APIchỉ đơn giản là sắp xếp các lớp Keras theo thứ tự tuần tự và do đó, nó được gọi là API tuần tự . 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 đơn giản gọi Sequential() API như được chỉ định bên dưới -

from keras.models import Sequential 
model = Sequential()

Thêm lớp

Để thêm một lớp, chỉ cần tạo một lớp bằng API lớp Keras và sau đó chuyển lớp thông qua hàm add () như được chỉ định bên dưới:

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, chúng ta đã tạo một lớp đầu vào, một lớp ẩn và một lớp đầu ra.

Truy cập mô hình

Keras cung cấp một số phương pháp để lấy thông tin mô hình như các lớp, dữ liệu đầu vào và dữ liệu đầu ra. Chúng 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 tenxơ đầ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 lượng của mô hình.

Nối tiếp mô hình

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. Chúng như sau:

  • get_config() - Trả về mô hình như 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 cho phù hợp.

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 ra 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 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 ra một mô hình mới.

from keras.models import model_from_yaml 
new_model = model_from_yaml(yaml_string)

Tóm tắt mô hình

Hiểu được mô hình là giai đoạn rất quan trọng để sử dụng nó đú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 lớp của nó.

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 
_________________________________________________________________ 
>>>

Huấn luyện và dự đoán mô hình

Mô hình cung cấp chức năng cho quá trình đào tạo, đánh giá và dự đoán. Chúng như sau:

  • compile - 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 thử nghiệm

  • predict - Dự đoán kết quả cho đầu vào mới.

API chức năng

API tuần tự được sử dụng để tạo mô hình theo từng lớp. API chức năng 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 chức năng, 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. Phần này giải thích ngắn gọn về mô hình chức năng.

Tạo một mô hình

Nhập lớp đầu vào bằng mô-đun bên dưới -

>>> from keras.layers import Input

Bây giờ, hãy tạo một lớp đầu vào chỉ định hình dạng kích thước đầu vào cho mô hình bằng cách sử dụng mã bên dưới:

>>> data = Input(shape=(2,3))

Xác định lớp cho đầu vào bằng mô-đun bên dưới -

>>> from keras.layers import Dense

Thêm lớp dày đặc cho đầu vào bằng cách sử dụng dòng mã bên dưới -

>>> layer = Dense(2)(data) 
>>> print(layer) 
Tensor("dense_1/add:0", shape =(?, 2, 2), dtype = float32)

Xác định mô hình bằng cách sử dụng mô-đun dưới đây -

from keras.models import Model

Tạo một mô hình theo cách chức năng bằng cách chỉ định cả lớp đầu vào và đầu ra -

model = Model(inputs = data, outputs = layer)

Mã hoàn chỉnh để tạo một mô hình đơn giản được hiển thị bên dưới:

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 
_________________________________________________________________