
- Keras 教程
- Keras - 首頁
- Keras - 簡介
- Keras - 安裝
- Keras - 後端配置
- Keras - 深度學習概述
- Keras - 深度學習
- Keras - 模組
- Keras - 層
- Keras - 自定義層
- Keras - 模型
- Keras - 模型編譯
- Keras - 模型評估和預測
- Keras - 卷積神經網路
- Keras - 使用 MPL 進行迴歸預測
- Keras - 使用 LSTM RNN 進行時間序列預測
- Keras - 應用
- Keras - 使用 ResNet 模型進行即時預測
- Keras - 預訓練模型
- Keras 有用資源
- Keras - 快速指南
- Keras - 有用資源
- Keras - 討論
Keras - 模型
如前所述,Keras 模型代表實際的神經網路模型。Keras 提供兩種建立模型的方式,簡單易用的順序 API 以及更靈活和高階的函式式 API。在本節中,讓我們學習如何使用這兩種順序和函式式API 來建立模型。
順序 API
順序 API 的核心思想是簡單地按順序排列 Keras 層,因此被稱為順序 API。大多數 ANN 的層也是按順序排列的,資料按照給定的順序從一層流向另一層,直到資料最終到達輸出層。
可以透過簡單地呼叫Sequential() API 來建立 ANN 模型,如下所示:
from keras.models import Sequential model = Sequential()
新增層
要新增一層,只需使用 Keras 層 API 建立一層,然後將該層透過 add() 函式傳遞,如下所示:
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)
這裡,我們建立了一個輸入層、一個隱藏層和一個輸出層。
訪問模型
Keras 提供了一些方法來獲取模型資訊,例如層、輸入資料和輸出資料。它們如下所示:
model.layers - 將模型的所有層作為列表返回。
>>> 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 - 將模型的所有輸入張量作為列表返回。
>>> inputs = model.inputs >>> inputs [<tf.Tensor 'dense_13_input:0' shape=(?, 8) dtype=float32>]
model.outputs - 將模型的所有輸出張量作為列表返回。
>>> outputs = model.outputs >>> outputs <tf.Tensor 'dense_15/BiasAdd:0' shape=(?, 8) dtype=float32>]
model.get_weights - 將所有權重作為 NumPy 陣列返回。
model.set_weights(weight_numpy_array) - 設定模型的權重。
序列化模型
Keras 提供了將模型序列化為物件以及 json 並稍後再次載入的方法。它們如下所示:
get_config() - 將模型作為物件返回。
config = model.get_config()
from_config() - 它接受模型配置物件作為引數並相應地建立模型。
new_model = Sequential.from_config(config)
to_json() - 將模型作為 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() - 接受模型的 json 表示並建立一個新模型。
from keras.models import model_from_json new_model = model_from_json(json_string)
to_yaml() - 將模型作為 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() - 接受模型的 yaml 表示並建立一個新模型。
from keras.models import model_from_yaml new_model = model_from_yaml(yaml_string)
總結模型
瞭解模型是正確使用它進行訓練和預測目的的重要階段。Keras 提供了一個簡單的方法,即 summary,以獲取有關模型及其層的所有資訊。
前面部分建立的模型的摘要如下所示:
>>> 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 _________________________________________________________________ >>>
訓練和預測模型
模型提供了用於訓練、評估和預測過程的函式。它們如下所示:
compile - 配置模型的學習過程
fit - 使用訓練資料訓練模型
evaluate - 使用測試資料評估模型
predict - 預測新輸入的結果。
函式式 API
順序 API 用於逐層建立模型。函式式 API 是建立更復雜模型的另一種方法。在函式式模型中,您可以定義共享層的多個輸入或輸出。首先,我們為模型建立一個例項,並連線到層以訪問模型的輸入和輸出。本節簡要介紹了函式式模型。
建立模型
使用以下模組匯入輸入層:
>>> from keras.layers import Input
現在,使用以下程式碼為模型指定輸入維度形狀,建立輸入層:
>>> data = Input(shape=(2,3))
使用以下模組為輸入定義層:
>>> from keras.layers import Dense
使用以下程式碼行為輸入新增密集層:
>>> layer = Dense(2)(data) >>> print(layer) Tensor("dense_1/add:0", shape =(?, 2, 2), dtype = float32)
使用以下模組定義模型:
from keras.models import Model
透過指定輸入和輸出層,以函式式方式建立模型:
model = Model(inputs = data, outputs = layer)
建立簡單模型的完整程式碼如下所示:
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 _________________________________________________________________