Keras - Modelos

Conforme aprendido anteriormente, o modelo Keras representa o modelo real da rede neural. Keras fornece dois modos para criar o modelo, API sequencial simples e fácil de usar , bem como API funcional mais flexível e avançada . Vamos aprender agora a criar um modelo usando API sequencial e funcional neste capítulo.

Sequencial

A ideia central de Sequential APIé simplesmente organizar as camadas Keras em uma ordem sequencial e, portanto, é chamado de API Sequencial . A maioria das RNA também tem camadas em ordem sequencial e os dados fluem de uma camada para outra na ordem dada até que os dados finalmente alcancem a camada de saída.

Um modelo de RNA pode ser criado simplesmente chamando Sequential() API conforme especificado abaixo -

from keras.models import Sequential 
model = Sequential()

Adicionar camadas

Para adicionar uma camada, basta criar uma camada usando a API de camada Keras e, em seguida, passar a camada através da função add () conforme especificado abaixo -

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)

Aqui, criamos uma camada de entrada, uma camada oculta e uma camada de saída.

Acesse o modelo

Keras fornece alguns métodos para obter as informações do modelo, como camadas, dados de entrada e dados de saída. Eles são os seguintes -

  • model.layers - Retorna todas as camadas do modelo como lista.

>>> 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 - Retorna todos os tensores de entrada do modelo como lista.

>>> inputs = model.inputs 
>>> inputs 
[<tf.Tensor 'dense_13_input:0' shape=(?, 8) dtype=float32>]
  • model.outputs - Retorna todos os tensores de saída do modelo como lista.

>>> outputs = model.outputs 
>>> outputs 
<tf.Tensor 'dense_15/BiasAdd:0' shape=(?, 8) dtype=float32>]
  • model.get_weights - Retorna todos os pesos como matrizes NumPy.

  • model.set_weights(weight_numpy_array) - Defina os pesos do modelo.

Serializar o modelo

Keras fornece métodos para serializar o modelo em objeto, bem como json e carregá-lo novamente mais tarde. Eles são os seguintes -

  • get_config() - IR retorna o modelo como um objeto.

config = model.get_config()
  • from_config() - Aceita o objeto de configuração do modelo como argumento e cria o modelo de acordo.

new_model = Sequential.from_config(config)
  • to_json() - Retorna o modelo como um objeto 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() - Aceita a representação json do modelo e cria um novo modelo.

from keras.models import model_from_json 
new_model = model_from_json(json_string)
  • to_yaml() - Retorna o modelo como uma string 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() - Aceita a representação yaml do modelo e cria um novo modelo.

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

Resuma o modelo

Entender o modelo é uma fase muito importante para usá-lo adequadamente para fins de treinamento e previsão. Keras fornece um método simples e resumido para obter todas as informações sobre o modelo e suas camadas.

Um resumo do modelo criado na seção anterior é o seguinte -

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

Treine e preveja o modelo

O modelo fornece funções para o processo de treinamento, avaliação e previsão. Eles são os seguintes -

  • compile - Configurar o processo de aprendizagem do modelo

  • fit - Treine o modelo usando os dados de treinamento

  • evaluate - Avalie o modelo usando os dados de teste

  • predict - Preveja os resultados para novas entradas.

API funcional

A API sequencial é usada para criar modelos camada por camada. API funcional é uma abordagem alternativa para a criação de modelos mais complexos. Modelo funcional, você pode definir várias entradas ou saídas que compartilham camadas. Primeiro, criamos uma instância para o modelo e nos conectamos às camadas para acessar a entrada e a saída do modelo. Esta seção explica resumidamente sobre o modelo funcional.

Crie um modelo

Importe uma camada de entrada usando o módulo abaixo -

>>> from keras.layers import Input

Agora, crie uma camada de entrada especificando a forma da dimensão de entrada para o modelo usando o código abaixo -

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

Defina a camada para a entrada usando o módulo abaixo -

>>> from keras.layers import Dense

Adicione camada densa para a entrada usando a linha de código abaixo -

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

Defina o modelo usando o módulo abaixo -

from keras.models import Model

Crie um modelo de maneira funcional, especificando a camada de entrada e saída -

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

O código completo para criar um modelo simples é mostrado abaixo -

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 
_________________________________________________________________