Uso sistemas pre-entrenados de TensorFlow Hub
Clase 24 de 28 • Curso Profesional de Redes Neuronales con TensorFlow
Contenido del curso
- 3

Carga y Procesamiento de Bases de Datos en Inteligencia Artificial
02:48 - 4

Carga de Bases de Datos JSON desde GCP en Google Colab
10:25 - 5

Codificación Base64 y Gestión de Imágenes en Google Colab
12:50 - 6

Preprocesamiento y limpieza de datos
12:15 - 7

Keras datasets
10:14 - 8

Datasets generators
18:36 - 9

Aprende a buscar bases de datos para deep learning
04:14 - 10

Cómo distribuir los datos
06:50 - 11

Crear la red neural, definir capas, compilar, entrenar, evaluar y predicciones
14:35
- 12

Métodos de regularización: overfitting y underfitting
11:16 - 13

Recomendaciones prácticas para ajustar un modelo
12:00 - 14

Métricas para medir la eficiencia de un modelo: callback
08:18 - 15

Monitoreo del entrenamiento en tiempo real: early stopping y patience
07:04 - 16

KerasTuner: construyendo el modelo
13:54 - 17

KerasTuner: buscando la mejor configuración para tu modelo
08:45
Para esta ocasión importaremos modelos desde TensorFlow Hub, una plataforma dedicada a la divulgación de configuraciones por parte de la comunidad.
Tensorflow Hub con Keras
Para usar el hub, debemos importarlo.
python
import tensorflow_hub as hub
Antes de todo, debemos detectar qué configuración usaremos, para esta ocasión usaremos la arquitectura MobileNetV1.
Este modelo es secuencial, por lo que stackearemos sus capas en un modelo de este tipo.
Para los modelos del hub, basta con agregar una capa de entrada, añadir la capa de KerasLayer con la URL del sitio (no olvides configurarlo como no entrenable) y a partir de este punto podrás inyectar tu propia arquitectura.
```python module_url = "https://tfhub.dev/google/imagenet/mobilenet_v1_050_160/classification/4"
model_hub = tf.keras.Sequential([ tf.keras.layers.InputLayer(input_shape = (150, 150, 3)), hub.KerasLayer(module_url, trainable = False), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation = "relu"), tf.keras.layers.Dropout(rate = 0.2), tf.keras.layers.Dense(len(classes), activation = "softmax") ]) ```
Antes de compilar la red debemos hacer build al modelo, siendo explícitos en las dimensiones de su tensor, en este caso MobileNet soporta frames de video, por lo que para usarlo como detector de imágenes bastará con anular esta dimensión.
python
model_hub.build((None, 150, 150, 3))
model_hub.summary()
Podemos notar en la arquitectura que se añade toda la capa cargada y posteriormente nuestra arquitectura.
```python Model: "sequential"
Layer (type) Output Shape Param #
keras_layer_2 (KerasLayer) (None, 1001) 1343049
flatten_2 (Flatten) (None, 1001) 0
dense (Dense) (None, 128) 128256
dropout (Dropout) (None, 128) 0
dense_1 (Dense) (None, 24) 3096
================================================================= Total params: 1,474,401 Trainable params: 131,352 Non-trainable params: 1,343,049
```
El proceso de compilación y entrenamiento será el tradicional.
```python model_hub.compile(optimizer = "adam", loss = "categorical_crossentropy", metrics = ["accuracy"])
history_hub = model_hub.fit( train_generator_resize, epochs = 5, validation_data = validation_generator_resize ) ```
Podemos notar que el rendimiento es menor al de Inception, pero en contraparte su tiempo de procesamiento es menor.
python
57/57 [==============================] - 5s 91ms/step - loss: 0.4389 - accuracy: 0.8461
Este tipo de modelos son útiles a la hora de procesar imágenes en vivo (como en cámaras de drones). Pero traen en consecuencias una pérdida de precisión, dependerá de tu proyecto aceptar estas alternativas o sacrificar tiempo de cómputo por mejores resultados.
Contribución creada por Sebastián Franco Gómez.