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.