Keras - Modèles
Comme appris précédemment, le modèle Keras représente le modèle de réseau neuronal réel. Keras fournit un mode deux pour créer le modèle, simple et facile à utiliser l' API séquentielle , ainsi que plus flexible et avancé API fonctionnelle . Apprenons maintenant à créer un modèle en utilisant à la fois l' API séquentielle et fonctionnelle dans ce chapitre.
Séquentiel
L'idée centrale de Sequential APIconsiste simplement à organiser les couches Keras dans un ordre séquentiel et ainsi, on l'appelle API séquentielle . La plupart des ANN ont également des couches dans un ordre séquentiel et les données circulent d'une couche à une autre couche dans l'ordre donné jusqu'à ce que les données atteignent finalement la couche de sortie.
Un modèle ANN peut être créé en appelant simplement Sequential() API comme spécifié ci-dessous -
from keras.models import Sequential
model = Sequential()
Ajouter des couches
Pour ajouter une couche, créez simplement une couche à l'aide de l'API de couche Keras, puis passez la couche via la fonction add () comme spécifié ci-dessous -
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)
Ici, nous avons créé une couche d'entrée, une couche cachée et une couche de sortie.
Accéder au modèle
Keras fournit quelques méthodes pour obtenir les informations du modèle telles que les couches, les données d'entrée et les données de sortie. Ils sont les suivants -
model.layers - Renvoie toutes les couches du modèle sous forme de liste.
>>> 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 - Renvoie tous les tenseurs d'entrée du modèle sous forme de liste.
>>> inputs = model.inputs
>>> inputs
[<tf.Tensor 'dense_13_input:0' shape=(?, 8) dtype=float32>]
model.outputs - Renvoie tous les tenseurs de sortie du modèle sous forme de liste.
>>> outputs = model.outputs
>>> outputs
<tf.Tensor 'dense_15/BiasAdd:0' shape=(?, 8) dtype=float32>]
model.get_weights - Renvoie tous les poids sous forme de tableaux NumPy.
model.set_weights(weight_numpy_array) - Réglez les poids du modèle.
Sérialiser le modèle
Keras fournit des méthodes pour sérialiser le modèle en objet ainsi qu'en json et le charger à nouveau ultérieurement. Ils sont les suivants -
get_config() - IR renvoie le modèle en tant qu'objet.
config = model.get_config()
from_config() - Il accepte l'objet de configuration du modèle comme argument et crée le modèle en conséquence.
new_model = Sequential.from_config(config)
to_json() - Renvoie le modèle en tant qu'objet 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() - Accepte la représentation json du modèle et crée un nouveau modèle.
from keras.models import model_from_json
new_model = model_from_json(json_string)
to_yaml() - Renvoie le modèle sous forme de chaîne 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() - Accepte la représentation yaml du modèle et crée un nouveau modèle.
from keras.models import model_from_yaml
new_model = model_from_yaml(yaml_string)
Résumer le modèle
Comprendre le modèle est une phase très importante pour l'utiliser correctement à des fins de formation et de prédiction. Keras fournit une méthode simple, récapitulative pour obtenir toutes les informations sur le modèle et ses couches.
Un résumé du modèle créé dans la section précédente est le suivant -
>>> 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
_________________________________________________________________
>>>
Former et prédire le modèle
Le modèle fournit une fonction pour le processus de formation, d'évaluation et de prédiction. Ils sont les suivants -
compile - Configurer le processus d'apprentissage du modèle
fit - Former le modèle à l'aide des données d'entraînement
evaluate - Évaluer le modèle à l'aide des données de test
predict - Prédire les résultats pour une nouvelle entrée.
API fonctionnelle
L'API séquentielle est utilisée pour créer des modèles couche par couche. L'API fonctionnelle est une approche alternative pour créer des modèles plus complexes. Modèle fonctionnel, vous pouvez définir plusieurs entrées ou sorties qui partagent des couches. Tout d'abord, nous créons une instance pour le modèle et nous nous connectons aux couches pour accéder à l'entrée et à la sortie du modèle. Cette section explique brièvement le modèle fonctionnel.
Créer un modèle
Importez une couche d'entrée à l'aide du module ci-dessous -
>>> from keras.layers import Input
Maintenant, créez un calque d'entrée spécifiant la forme de cote d'entrée pour le modèle à l'aide du code ci-dessous -
>>> data = Input(shape=(2,3))
Définissez la couche pour l'entrée à l'aide du module ci-dessous -
>>> from keras.layers import Dense
Ajoutez une couche dense pour l'entrée en utilisant la ligne de code ci-dessous -
>>> layer = Dense(2)(data)
>>> print(layer)
Tensor("dense_1/add:0", shape =(?, 2, 2), dtype = float32)
Définissez le modèle à l'aide du module ci-dessous -
from keras.models import Model
Créer un modèle de manière fonctionnelle en spécifiant à la fois la couche d'entrée et de sortie -
model = Model(inputs = data, outputs = layer)
Le code complet pour créer un modèle simple est présenté ci-dessous -
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
_________________________________________________________________