Skip to main content

Modelo funcional usando el API de Keras

· 3 min read
Darvin Cotrina

Para crear un modelo de deep learning en keras se pueden usar dos API’s: la secuencial y la funcional. La secuencial es la más sencilla de usar, pero la funcional es más flexible y permite crear modelos más complejos. En este notebook se muestra como crear un modelo funcional.

1. Importar modulo

import tensorflow as tf

2. Modelo Sequencial

Crearemos un modelo secuencial, que es una pila lineal de capas. Para ello, usaremos la función Sequential(), en el que nos basaremos para crear nuestro modelo funcional.

def sequential_model():
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
return model

Modelo con el API funcional

Ahora crearemos un modelo usando el api funcional de Keras. Este modelo es un poco más flexible que el modelo secuencial, ya que nos permite crear modelos con múltiples entradas y salidas, y también nos permite crear modelos con capas compartidas.

def functional_model():
# creamos nuestra entrada
input = tf.keras.Input(shape=(28, 28))
# creamos nuestra capas
x = tf.keras.layers.Flatten()(input)
x = tf.keras.layers.Dense(128, activation='relu')(x)
x = tf.keras.layers.Dense(64, activation='softmax')(x)
# definimos nuestro modelo
model = tf.keras.Model(inputs=input, outputs=x)
return model

model_func = functional_model()

3. Entrenar nuestro modelo

Ahora vamos a entrenar nuestro modelo usando los datos de fashion_mnist que es uno de los datasets de ejemplo que vienen con tensorflow.

fashion_mnist = tf.keras.datasets.fashion_mnist

(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()

# normalizar los datos
X_train = X_train / 255.0
X_test = X_test / 255.0

# configurar y conpilar nuestro modelo
model_func.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])

# entrenar el modelo
model_func.fit(X_train, y_train, epochs=5)
Epoch 1/5
1875/1875 [==============================] - 6s 3ms/step - loss: 0.2289 - accuracy: 0.9147
Epoch 2/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.2180 - accuracy: 0.9187
Epoch 3/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.2137 - accuracy: 0.9207
Epoch 4/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.2063 - accuracy: 0.9226
Epoch 5/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.2003 - accuracy: 0.9247
<keras.callbacks.History at 0x212d77f6d50>

4. Evalular el modelo

Por ultimo vamos a evaluar el modelo con el conjunto de test. Para ello vamos a utilizar la función evaluate del modelo. Esta función nos devuelve el valor de la función de perdida y el valor de la métrica que hemos definido.

model_func.evaluate(X_test, y_test)
313/313 [==============================] - 1s 2ms/step - loss: 0.3422 - accuracy: 0.8854
[0.34223565459251404, 0.8853999972343445]

Como hemos visto crear un modelo usando el API funcional de keras, no es complicado, pero si es un poco más complejo que usando el API secuencial. Sin embargo, debemos tener en cuenta que el API funcional nos permite crear modelos más complejos, con más de una entrada y más de una salida, lo cual no es posible con el API secuencial.