Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:2eval:tema07

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:iabd:pia:2eval:tema07 [2022/04/08 09:33]
admin [7. Entrenamiento de redes neuronales a) Funciones de coste]
clase:iabd:pia:2eval:tema07 [2024/01/30 15:26] (actual)
admin [Distancia del coseno]
Línea 27: Línea 27:
 La forma mas fácil de ver las diferencias que hay  entre $y$ e $\hat{y}$ es simplemente restarlas y eso nos dará lo que llamamos el error: La forma mas fácil de ver las diferencias que hay  entre $y$ e $\hat{y}$ es simplemente restarlas y eso nos dará lo que llamamos el error:
  
-$$error=y-\hat{y}$$+$$error_i=y_i-\hat{y}_i$$
  
 Pero como tenemos muchas $y$ e $\hat{y}$ así que deberemos sumar todos los errores y hacer la media (dividirlo entre el número de datos): Pero como tenemos muchas $y$ e $\hat{y}$ así que deberemos sumar todos los errores y hacer la media (dividirlo entre el número de datos):
Línea 33: Línea 33:
 <note tip>A las funciones de coste también se les llama funciones de pérdida o //loss// en inglés.</note> <note tip>A las funciones de coste también se les llama funciones de pérdida o //loss// en inglés.</note>
  
-$$loss=\frac{1}{N} \sum_{i=1}^{N} (y_i-\hat{y}_i)$$+$$loss=error \: medio=\frac{1}{N} \sum_{i=1}^{N}  
 +error_i =\frac{1}{N} \sum_{i=1}^{N} (y_i-\hat{y}_i)$$
  
 sin embargo este primer intento no es muy adecuado ya que la suma de los errores positivos mas los errores negativos se podrían cancelar y obtener que no hay coste. sin embargo este primer intento no es muy adecuado ya que la suma de los errores positivos mas los errores negativos se podrían cancelar y obtener que no hay coste.
Línea 39: Línea 40:
 La primera función de coste sería entonces hacer el valor absoluto de los errores. La primera función de coste sería entonces hacer el valor absoluto de los errores.
  
-$$loss=\frac{1}{N} \sum_{i=1}^{N}|y_i-\hat{y}_i|$$+$$loss \: con \: MAE=error \: medio \: con \: MAE=\frac{1}{N} \sum_{i=1}^{N}|y_i-\hat{y}_i|$$
  
 Siguiendo con nuestro ejemplo de: Siguiendo con nuestro ejemplo de:
Línea 70: Línea 71:
     np.random.seed(5)     np.random.seed(5)
     tf.random.set_seed(5)     tf.random.set_seed(5)
 +    random.seed(5)  
          
     model=Sequential()     model=Sequential()
Línea 349: Línea 351:
  
 {{ :clase:iabd:pia:2eval:funcion_coste_distancia_coseno_open_pose_2.gif?direct |}} {{ :clase:iabd:pia:2eval:funcion_coste_distancia_coseno_open_pose_2.gif?direct |}}
 +
 +
  
 Podemos definir la posición como un conjunto de vectores de cada una de las extremidades. El angulo de cada vector nos dice la posición de cada extremidad pero el tamaño del vector no dice el tamaño de la extremidad. Ahora veamos la siguiente imagen. Podemos definir la posición como un conjunto de vectores de cada una de las extremidades. El angulo de cada vector nos dice la posición de cada extremidad pero el tamaño del vector no dice el tamaño de la extremidad. Ahora veamos la siguiente imagen.
Línea 356: Línea 360:
  
 Son 3 personas distintas cada una con tamaños de extremidades distintas además que dependiendo de si están en la imagen más hacia el fondo, sus tamaños serán distintos. Para saber si las 3 están haciendo los mismos movimientos, ¿nos interesa que el tamaño de cada vector sea el mismo o nos interesa que los ángulos de cada vector sean los mismo? Obviamente lo que nos interesa es que el ángulo sea el mismo y no si el tamaño es el mismo. Son 3 personas distintas cada una con tamaños de extremidades distintas además que dependiendo de si están en la imagen más hacia el fondo, sus tamaños serán distintos. Para saber si las 3 están haciendo los mismos movimientos, ¿nos interesa que el tamaño de cada vector sea el mismo o nos interesa que los ángulos de cada vector sean los mismo? Obviamente lo que nos interesa es que el ángulo sea el mismo y no si el tamaño es el mismo.
 +
 +Lo mismo se puede aplicar a un partido de papel:
 +
 +{{ :clase:iabd:pia:2eval:distancia_coseno_padel.mp4 |}}
  
 Otro ejemplo sería para catalogar películas de géneros semejantes. Veamos la siguiente gráfica: Otro ejemplo sería para catalogar películas de géneros semejantes. Veamos la siguiente gráfica:
Línea 393: Línea 401:
 $$Binary \: Cross \: Entropy = - \frac{1}{N} \sum_{i=1}^{N} y_{i} \cdot log(\hat{y_i}) + (1-y_{i}) \cdot log(1-\hat{y_i}) $$  $$Binary \: Cross \: Entropy = - \frac{1}{N} \sum_{i=1}^{N} y_{i} \cdot log(\hat{y_i}) + (1-y_{i}) \cdot log(1-\hat{y_i}) $$ 
  
-Se ha puesto la fórmula para explicar que su valor va de $[0,\infty[$. Ya que por un lado el logaritmo de un número cercano a cero es menos infinito, de ahí que se ponga el signo menos al principio. Y que los datos de $y_i$ e $\hat{y_i}$ al ser probabilidades su rango es entre 0 y 1.+Los valores de $y_i$ suelen ser o 1mientras que los valores de $\hat{y_i}$ es un número real entre 0 y 1 
 + 
 +Veamos ahora graficamente como es la fórmula según si $y=0$ o $y=1$ 
 +{{:clase:iabd:pia:2eval:binary_crossentropy.png?nolink|}} 
 + 
  
 Su uso en Keras es: Su uso en Keras es:
Línea 404: Línea 417:
 Mas información: Mas información:
   * [[https://keras.io/api/losses/probabilistic_losses/#binarycrossentropy-class|BinaryCrossentropy class]]   * [[https://keras.io/api/losses/probabilistic_losses/#binarycrossentropy-class|BinaryCrossentropy class]]
 +  * [[https://towardsdatascience.com/where-did-the-binary-cross-entropy-loss-function-come-from-ac3de349a715|Where did the Binary Cross-Entropy Loss Function come from?]]
 +  * [[https://stats.stackexchange.com/questions/181035/how-to-derive-the-likelihood-function-for-binomial-distribution-for-parameter-es|How to derive the likelihood function for binomial distribution for parameter estimation?]]
   * [[https://machinelearningmastery.com/cross-entropy-for-machine-learning/|A Gentle Introduction to Cross-Entropy for Machine Learning]]   * [[https://machinelearningmastery.com/cross-entropy-for-machine-learning/|A Gentle Introduction to Cross-Entropy for Machine Learning]]
  
Línea 427: Línea 442:
 | Regresión  |  Lineal  |  MSE o Distancia del coseno  | | Regresión  |  Lineal  |  MSE o Distancia del coseno  |
 | Clasificación con 2 posibles valores |  Sigmoide  |  Binary Cross Entropy  | | Clasificación con 2 posibles valores |  Sigmoide  |  Binary Cross Entropy  |
-| Clasificación con más de 2 posibles valores |  Softmax  |  Categorical Cross Entropy  |+| Clasificación con más de 2 posibles valores NO excluyentes entre si |  Sigmoide  |  Binary Cross Entropy 
 +| Clasificación con más de 2 posibles valores SI excluyentes entre si |  Softmax  |  Categorical Cross Entropy  |
  
  
Línea 440: Línea 456:
 np.random.seed(5) np.random.seed(5)
 tf.random.set_seed(5) tf.random.set_seed(5)
- +random.seed(5)  
    
 model=Sequential() model=Sequential()
Línea 454: Línea 470:
 ===== Ejercicios ===== ===== Ejercicios =====
  
-==== Ejercicio 1 ====+==== Ejercicio 1.A ====
 En una red neuronal En una red neuronal
   * Estos son los valores que debería haber sacado la red   * Estos son los valores que debería haber sacado la red
Línea 489: Línea 505:
  
  
-Haz un programa en python que calcule **mediante las fórmulas** la pérdida de la red con ''MAE'' ''MSE''+Haz un programa en python que calcule **mediante las fórmulas** la pérdida de la red con ''MAE''''MSE'' y ''Binary Cross Entropy''
  
 +==== Ejercicio 1.B ====
 +Repita el ejercicio anterior pero ahora en vez de usar su código en python, usan las funciones de coste de keras:
 +  * ''tf.keras.losses.mean_absolute_error''
 +  * ''tf.keras.losses.mean_squared_error''
 +  * ''tf.keras.losses.categorical_crossentropy''
 + 
 ==== Ejercicio 2 ==== ==== Ejercicio 2 ====
 Tenemos dos redes neuronales, que deberían haber sacado los siguientes datos. Tenemos dos redes neuronales, que deberían haber sacado los siguientes datos.
Línea 551: Línea 573:
  
  
-Calcula la pérdida de las 2 redes con ''MAE'' y con ''MSE'' (mediante las funciones de Keras). +Calcula la pérdida de las 2 redes con ''MAE''''MSE'' y ''Binary Cross Entropy'' (mediante las funciones de Keras). 
  
-^ ^  MAE  ^  MSE  ^  +^ ^  MAE  ^  MSE  ^ Binary Cross Entropy 
-^  Red A  |    |    | +^  Red A  |    |    |   
-^  Red B  |    |    |+^  Red B  |    |    |   |
  
 ¿cual es mejor red? Explica porqué ¿cual es mejor red? Explica porqué
Línea 587: Línea 609:
 {{ :clase:iabd:pia:2eval:ejercicio_mse_mae.png?direct |}} {{ :clase:iabd:pia:2eval:ejercicio_mse_mae.png?direct |}}
  
 +<note warning> 
 +En este tema ya hemos aprendido que la función de perdida para este ejemplo debe ser **Binary Cross Entropy** pero seguimos usando ''MAE'' y ''MSE'' porque son más fáciles de calcular manualmente por el alumno en los ejercicios. 
 +</note>
  
 ==== Ejercicio 4 ==== ==== Ejercicio 4 ====
Línea 613: Línea 637:
  
 Comprueba si las 3 pérdidas tienen el mismo valor. Comprueba si las 3 pérdidas tienen el mismo valor.
 +
 +<note warning>
 +En este tema ya hemos aprendido que la función de perdida para este ejemplo debe ser **Binary Cross Entropy** pero seguimos usando ''MAE'' y ''MSE'' porque son más fáciles de calcular manualmente por el alumno en los ejercicios.
 +</note>
  
 ==== Ejercicio 5.A ==== ==== Ejercicio 5.A ====
Línea 668: Línea 696:
 <sxh python> <sxh python>
 df = df.pivot(index='palabra_y', columns='palabra_x', values='distancia_coseno') df = df.pivot(index='palabra_y', columns='palabra_x', values='distancia_coseno')
 +</sxh>
 +
 +muestra el heatmap
 +<sxh python>
 +sns.heatmap(df,ax=axes)
 </sxh> </sxh>
  
Línea 711: Línea 744:
 ==== Ejercicio 7 ==== ==== Ejercicio 7 ====
 Crea una red neuronal para entrenar las flores. Tienes que entrenarla durante 300 épocas con todas las combinaciones de: Crea una red neuronal para entrenar las flores. Tienes que entrenarla durante 300 épocas con todas las combinaciones de:
-  * Funciones de activaciónSigmoidTanhReLULeakyReLUSeLUELU +  * Estructura de la red: 
-  * Funciones de pérdidaMSE, MAE, Binary Crossentropy, Categorical Crossentropy+    * [3] 
 +    * [43] 
 +    * [483] 
 +    * [4816, 8, 3] 
 +    * [4, 8, 16, 32, 16, 8, 4, 3] 
 +    * [4, 8, 16, 32, 64, 32, 16, 8, 4, 3] 
 +    * [4, 8, 16, 32, 64, 128, 64, 32, 16, 8, 4, 3] 
 +  * Funciones de activación 
 +    * Sigmoid 
 +    * Tanh 
 +    * ReLU 
 +    * LeakyReLU 
 +    * SeLU 
 +    * ELU
  
-Las neuronas de cada capa son ''[4,8,16,8,3]'' 
  
-<note tip> 
-La función de activación de la última capa siempre debe ser ''softmax'' 
-</note> 
- 
-La gráfica resultante debe ser similar a ésta: 
- 
-{{ :clase:iabd:pia:2eval:rendimiento_loss.png?direct&800 |}} 
  
 Responde las siguientes cuestiones: Responde las siguientes cuestiones:
-  * ¿En teoría cual debería ser la mejor función de pérdida? +  * ¿Cual ha resultado ser la mejor estructura de red
-  * ¿Cual ha resultado ser la mejor función de pérdida+  * ¿Cual ha sido la mejor función de activación para la mejor estructura de red?
-  * ¿Cual ha sido la peor función de activación+
-  * ¿Cual ha sido la mejor/es función/es de activación?+
  
 ==== Ejercicio 8.A ==== ==== Ejercicio 8.A ====
Línea 769: Línea 805:
  
 ==== Ejercicio 8.D ==== ==== Ejercicio 8.D ====
-Crea y entrena una red neuronal que averigüe si una transacción es fraudulenta. Los datos los obtendrás de [[https://www.kaggle.com/mlg-ulb/creditcardfraud|Credit Card Fraud Detection Dataset]]+Crea y entrena una red neuronal que averigüe si tiene cáncer de mama. Los datos los obtendrás con la función ''load_breast_cancer''.
  
-Deberás: 
-  * Probar con varias funciones de activación en las capas ocultas para ver cual es la mejor. 
-  * Elegir adecuadamente la función de activación de la capa de salida 
-  * Elegir adecuadamente la función de coste a usar 
  
- +<sxh python> 
-==== Ejercicio 8.E ==== +from sklearn.datasets import load_breast_cancer 
-Crea y entrena una red neuronal con los datos de las flores pero ahora ya deberás tener en cuenta los 3 tipos de flor.+</sxh>
  
 Deberás: Deberás:
clase/iabd/pia/2eval/tema07.1649403181.txt.gz · Última modificación: 2022/04/08 09:33 por admin