Cómo utilizar TensorFlow 2.0 con Python

1

Redes neuronales con TensorFlow

2

Introducción a TensorFlow 2.0

Manejo y preprocesamiento de datos para redes neuronales

3

Uso de data pipelines

4

Cómo cargar bases de datos JSON

5

Cargar bases de datos CSV y BASE 64

6

Preprocesamiento y limpieza de datos

7

Keras datasets

8

Datasets generators

9

Aprende a buscar bases de datos para deep learning

10

Cómo distribuir los datos

11

Crear la red neural, definir capas, compilar, entrenar, evaluar y predicciones

Optimización de precisión de modelos

12

Métodos de regularización: overfitting y underfitting

13

Recomendaciones prácticas para ajustar un modelo

14

Métricas para medir la eficiencia de un modelo: callback

15

Monitoreo del entrenamiento en tiempo real: early stopping y patience

16

KerasTuner: construyendo el modelo

17

KerasTuner: buscando la mejor configuración para tu modelo

Almacenamiento y carga de modelos

18

Almacenamiento y carga de modelos: pesos y arquitectura

19

Criterios para almacenar los modelos

Fundamentos de aprendizaje por transferencia

20

Introducción al aprendizaje por transferencia

21

Cuándo utilizar aprendizaje por transferencia

22

Carga de sistemas pre-entrenados en Keras

23

API funcional de Keras

24

Uso sistemas pre-entrenados de TensorFlow Hub

Resultados de entrenamiento

25

Introducción a variables relevantes del TensorBoard

26

Análisis y publicación de resultados del entrenamiento

27

Introducción al despliegue de modelos en producción

28

Siguientes pasos con deep learning

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

15 Días
8 Hrs
34 Min
56 Seg

Crear la red neural, definir capas, compilar, entrenar, evaluar y predicciones

11/28
Recursos

Ya tenemos todas las configuraciones previas para programar nuestra red, lo siguiente será definir una arquitectura, compilar el modelo y revisar el rendimiento de la red.

Creando el modelo de red neuronal

Definiremos un modelo con la clase Sequential de Keras, esta nos permitirá apilar varias capas una encima de otra para lograr el efecto de aprendizaje profundo.

La primer capa será de entrada, donde recibiremos una imagen de 28x28 pixeles en un solo canal, una vez recibida será aplanada para ser procesada como un array unidimensional.

Las siguientes 2 capas serán capas profundas con 256 y 128 neuronas respectivamente, y tendrán como función de activación la ReLU.

La capa de salida será una capa de 24 neuronas (una por cada posible clase) de activación Softmax que nos retornará un array con las probabilidades de cada letra.

python model_base = tf.keras.models.Sequential( [tf.keras.layers.Flatten(input_shape = (28, 28, 1)), tf.keras.layers.Dense(256, activation = "relu"), tf.keras.layers.Dense(128, activation = "relu"), tf.keras.layers.Dense(len(classes), activation = "softmax")] )

Si llamamos el método summary obtendremos un resumen de la arquitectura de la red.

```python model_base.summary()

Model: "sequential"


Layer (type) Output Shape Param

flatten_2 (Flatten) (None, 784) 0

dense_5 (Dense) (None, 256) 200960

dense_6 (Dense) (None, 128) 32896

dense_7 (Dense) (None, 24) 3096

================================================================= Total params: 236,952 Trainable params: 236,952 Non-trainable params: 0


```

Compilación y entrenamiento del modelo

Compilaremos el modelo definiendo un optimizador, para este caso determinamos adam, un algoritmo que permite actualizar automáticamente el learning rate según el desempeño de la red. Como función de pérdida aplicaremos categorical cross entropy y la métrica de éxito será la precisión.

Entrenaremos el modelo con el image generator de entrenamiento, durante 20 épocas y con los datos de validación.

```python model_base.compile(optimizer = "adam", loss = "categorical_crossentropy", metrics = ["accuracy"])

history = model_base.fit( train_generator, epochs = 20, validation_data = validation_generator ) ```

En la época final tendremos una precisión casi total durante el entrenamiento pero un rendimiento diferente sobre los datos de validación.

python Epoch 20/20 215/215 [==============================] - 6s 27ms/step - loss: 0.0101 - accuracy: 0.9999 - val_loss: 1.3020 - val_accuracy: 0.7572

Si evaluamos el modelo, nos encontraremos con una precisión del 76%, donde entrenamiento era casi absoluta.

python results = model_base.evaluate(test_generator) 57/57 [==============================] - 2s 36ms/step - loss: 1.2101 - accuracy: 0.7616

Análisis del desempeño de la red

Para entender más gráficamente lo que sucedió, crearemos la función de visualización de resultados, que comparará el rendimiento del entrenamiento sobre el rendimiento de validación tanto términos de accuracy como de loss.

```python def visualizacion_resultados(history): epochs = [i for i in range(20)] fig, ax = plt.subplots(1, 2) train_acc = history.history["accuracy"] train_loss = history.history["loss"] val_acc = history.history["val_accuracy"] val_loss = history.history["val_loss"] fig.set_size_inches(16, 9)

ax[0].plot(epochs, train_acc, "go-", label = "Train accuracy") ax[0].plot(epochs, val_acc, "ro-", label = "Validation accuracy") ax[0].set_title("Train and Val accuracy") ax[0].legend() ax[0].set_xlabel("Epochs") ax[0].set_ylabel("Accuracy")

ax[1].plot(epochs, train_loss, "go-", label = "Train Loss") ax[1].plot(epochs, val_loss, "ro-", label = "Validation Loss") ax[1].set_title("Train and Val loss") ax[1].legend() ax[1].set_xlabel("Epochs") ax[1].set_ylabel("Loss")

plt.show() ```

Si corremos la función obtendremos información valiosísima con respecto al comportamiento del modelo.

python visualizacion_resultados(history)

Rendimiento de la primer red

Puedes notar una diferencia abrupta tanto en el accuracy como en el loss, en la etapa de entrenamiento la red aprendió óptimamente y redujo la pérdida de manera constante, mientras que en validación sufrió de un rápido estancamiento, esto puede ser señal de overfitting, donde la red calcó los ejemplos y no los patrones.

Contribución creada por Sebastián Franco Gómez.

Aportes 16

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Un claro caso de overfitting, Me esta encantado el curso, Gracias maestro

Para ahorrar tiempo:

def visualizacion_resultados(history):
  epochs = [i for i in range(20)]
  fig, ax = plt.subplots(1,2)
  train_acc = history.history["accuracy"]
  train_loss = history.history["loss"]
  val_acc = history.history["val_accuracy"]
  val_loss = history.history["val_loss"]
  fig.set_size_inches(16,9)

  ax[0].plot(epochs, train_acc, "go-",label = "Entrenamiento accuracy")
  ax[0].plot(epochs, val_acc, "ro-",label = "Validación accuracy")
  ax[0].set_title("Entrenamiento y validación accuracy")
  ax[0].legend()
  ax[0].set_xlabel("Epochs")
  ax[0].set_ylabel("Accuracy")

  ax[1].plot(epochs, train_loss, "go-",label = "Entrenamiento loss")
  ax[1].plot(epochs, val_loss, "ro-",label = "Validación loss")
  ax[1].set_title("Entrenamiento y validación loss")
  ax[1].legend()
  ax[1].set_xlabel("Epochs")
  ax[1].set_ylabel("Loss")

  plt.show() 

Para que ahorren tiempo

si, es un vivo ejemplo de overfitting, y el curso esta confirmando de forma mucho mas practica todo el background que se debe de tener en NN

Trabajando con el dataset de Malaria se obtienen los siguientes resultados:

Existe una buena relación entre la curva de entrenamiento y la curva de validación, se podría decir que el modelo se ha generalizado correctamente, aunque debemos tomar en cuenta que solamente se ha logrado una precisión de 0.72.

cada vez se pone mejor el curso 😃

Claro, puedo ayudarte a analizar estas gráficas. \### Análisis de las Gráficas de Accuracy y Loss 1\. \*\*Gráfica de Accuracy (Izquierda):\*\* \- \*\*Entrenamiento (verde):\*\* La precisión del modelo en el conjunto de entrenamiento aumenta rápidamente y alcanza un nivel muy alto, cercano al 100%. \- \*\*Validación (rojo):\*\* La precisión en el conjunto de validación alcanza un pico alrededor del 75-80%, pero luego parece estabilizarse o incluso mostrar una leve tendencia a la baja en las últimas épocas. \- \*\*Posible sobreajuste (overfitting):\*\* La gran diferencia entre la precisión de entrenamiento y la precisión de validación indica que el modelo podría estar sobreajustando. Está aprendiendo muy bien el conjunto de entrenamiento, pero no generaliza bien en el conjunto de validación. 2\. \*\*Gráfica de Loss (Derecha):\*\* \- \*\*Entrenamiento (verde):\*\* La pérdida en el conjunto de entrenamiento disminuye rápidamente y alcanza valores cercanos a cero, lo cual es consistente con el alto valor de precisión en este conjunto. \- \*\*Validación (rojo):\*\* La pérdida en el conjunto de validación también disminuye inicialmente, pero luego empieza a aumentar ligeramente o a estabilizarse, lo que es otro indicio de sobreajuste. \### Conclusiones y Recomendaciones \- \*\*Sobreajuste:\*\* Este comportamiento es típico de un modelo que sobreajusta, especialmente si la diferencia entre el accuracy de entrenamiento y validación es alta y la pérdida en validación aumenta después de algunas épocas. \- \*\*Posibles soluciones:\*\* \- \*\*Regularización:\*\* Puedes intentar técnicas como `Dropout`, `L2 regularization` o `Batch Normalization` para reducir el sobreajuste. \- \*\*Aumentar los datos:\*\* Si es posible, intenta aumentar la cantidad de datos de entrenamiento, lo que podría ayudar a mejorar la generalización. \- \*\*Early Stopping:\*\* Implementa una técnica de parada temprana (early stopping) para detener el entrenamiento cuando la pérdida de validación comienza a aumentar.
Aquí tienes una guía paso a paso sobre cómo crear una red neuronal con TensorFlow y Keras para realizar clasificación de imágenes. Estos pasos incluyen definir las capas, compilar el modelo, entrenarlo, evaluarlo y hacer predicciones. \### 1. Importar las Bibliotecas Necesarias Primero, importamos TensorFlow y Keras, y configuramos el entorno. ```python import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D from tensorflow.keras.datasets import mnist # Dataset de ejemplo from tensorflow.keras.utils import to\_categorical ``` \### 2. Preparar los Datos Usaremos el dataset MNIST de dígitos escritos a mano como ejemplo. Esto incluye cargar y preprocesar los datos. ```python \# Cargar los datos (X\_train, y\_train), (X\_test, y\_test) = mnist.load\_data() \# Normalizar los datos de imágenes (escalado entre 0 y 1) X\_train, X\_test = X\_train / 255.0, X\_test / 255.0 \# Redimensionar los datos para añadir una dimensión de canal X\_train = X\_train.reshape(X\_train.shape\[0], 28, 28, 1) X\_test = X\_test.reshape(X\_test.shape\[0], 28, 28, 1) \# Convertir las etiquetas en una codificación categórica y\_train = to\_categorical(y\_train, 10) y\_test = to\_categorical(y\_test, 10) ``` \### 3. Crear la Red Neuronal y Definir las Capas Creamos un modelo secuencial con capas de convolución, max pooling y capas densas. ```python model = Sequential(\[ Conv2D(32, (3, 3), activation='relu', input\_shape=(28, 28, 1)), MaxPooling2D((2, 2)), Conv2D(64, (3, 3), activation='relu'), MaxPooling2D((2, 2)), Flatten(), Dense(128, activation='relu'), Dense(10, activation='softmax') ]) ``` \### 4. Compilar el Modelo Configura el optimizador, la función de pérdida y la métrica de precisión. ```python model.compile(optimizer='adam', loss='categorical\_crossentropy', metrics=\['accuracy']) ``` \### 5. Entrenar el Modelo Ahora entrenamos el modelo usando el conjunto de datos de entrenamiento y validación. ```python history = model.fit(X\_train, y\_train, epochs=10, batch\_size=32, validation\_split=0.2) ``` \### 6. Evaluar el Modelo Evaluamos el modelo en el conjunto de prueba. ```python test\_loss, test\_accuracy = model.evaluate(X\_test, y\_test) print(f'Precisión en el conjunto de prueba: {test\_accuracy:.4f}') ``` \### 7. Hacer Predicciones Finalmente, hacemos predicciones sobre nuevas muestras. ```python predictions = model.predict(X\_test) \# Convertir a etiquetas predichas predicted\_classes = predictions.argmax(axis=1) \# Ejemplo de predicción en una sola imagen import numpy as np image\_index = 0 # Cambia el índice para ver otra imagen plt.imshow(X\_test\[image\_index].reshape(28, 28), cmap='gray') plt.title(f'Predicción: {predicted\_classes\[image\_index]}') plt.show() ``` \### 8. Visualizar el Rendimiento (Opcional) Puedes visualizar la precisión y pérdida del modelo en cada época. ```python import matplotlib.pyplot as plt \# Precisión plt.plot(history.history\['accuracy'], label='Entrenamiento') plt.plot(history.history\['val\_accuracy'], label='Validación') plt.title('Precisión del modelo') plt.xlabel('Épocas') plt.ylabel('Precisión') plt.legend() plt.show() \# Pérdida plt.plot(history.history\['loss'], label='Entrenamiento') plt.plot(history.history\['val\_loss'], label='Validación') plt.title('Pérdida del modelo') plt.xlabel('Épocas') plt.ylabel('Pérdida') plt.legend() plt.show() ``` Estos pasos cubren todo el flujo de trabajo básico para crear, entrenar, evaluar y hacer predicciones con una red neuronal en TensorFlow y Keras.
No entiendo porque arranca con el mainProject empezado, siendo que es un archivo que no habíamos creado aun.

El sobreajuste es un problema común en el aprendizaje automático, particularmente cuando se entrenan redes neuronales, donde el modelo aprende demasiado bien los datos de entrenamiento pero no logra generalizar de manera efectiva a datos invisibles.

  • Los resultados del modelo muetran una claro ploblema de sobreajuste
Trabajando con el dataset de **tumores cerebrales** se obtienen los siguientes resultados:![](https://static.platzi.com/media/user_upload/image-700552fd-40d3-46ba-92b1-127b1e3858e5.jpg) Existe una buena relación entre la curva de entrenamiento y la curva de validación, se podría decir que el modelo se ha generalizado correctamente, se ha logrado una accuracy de 0.9209 y un loss 0.5740


Tomando en cuenta el curso de fundamentos de redes neuronales, realicé un dropout del 40% para mejorar el overffiting presentado en las gráficas. Vale la pena decir que se puede mejorar
Código:

#Implementar modelo y creación de capas
model_base = tf.keras.models.Sequential([#La capa siguiente depende de la anterior
    tf.keras.layers.Flatten(input_shape=(28,28,1)),                   
    tf.keras.layers.Dense(256,activation = "relu"),
    tf.keras.layers.Dropout(0.40),                                          
    tf.keras.layers.Dense(128,activation = "relu"),                                    
    tf.keras.layers.Dense(len(classes),activation = "softmax") 

])
El número de parámetros es la cantidad de pesos sinápticos entre capas de la red neuronal. Se puede calcular multiplicando el número de neuronas en la capa anterior, por el número de neuronas en la capa actual. Además, hay que sumarle los pesos sinápticos de los bias de cada neurona. Entonces, al resultado de la multiplicación anterior, se le suma el número de neuronas de la capa actual.

El split de validación siempre debe salir de training, es por esto que solo existen las etiquetas “training” y “validation” para los subset.
*
En el dataset de señales, hay en total 27455 imágenes de train y 7172 de test.
*
Si saco el 0.2 de validación del dataset de training al final obtengo:
train: 21974
validation: 5481
test: 7172
Es decir, las imágenes de validación no se tienen en cuenta en el training.
*
Sin embargo, si saco el 0.2 de validación del dataset de testeo (como lo hizo el profesor), obtengo:
train: 27455
validation: 1425
test: 7172
Es decir, las imágenes que estoy usando en validación, son imágenes que luego uso en el test, ya que estas no son descontadas del otro generador sino copiadas.

Existe overfitting dado que el modelo se ajusto de sobremanera a los datos de entrenamiento y no generalizó para los datos de validación.

ejemplo si estoy trabajando en una clasificacion binaria donde haria dos elecciones es positivo o es negativo

seria algo asi
classes=[‘positivo’,‘negativo’]

tf.keras.layers .dense (len(classes) , activation =‘sigmoud’)

??? esta bn ??