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
Última revisión Ambos lados, revisión siguiente
clase:iabd:pia:2eval:tema07 [2022/03/17 17:02]
admin [7. Entrenamiento de redes neuronales a) Funciones de coste]
clase:iabd:pia:2eval:tema07 [2024/01/25 19:24]
admin [Ejercicios]
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 50: Línea 51:
  
 $$ $$
-\large loss=loss\_function(x,y,parámetros)=\frac{1}{N} \sum_{i=1}^{N}|y_i-\frac{1}{1 + e^{-(  w_{5,2}\frac{1}{1 + e^{-( w_{2}x+b_{2}  )}}+w_{5,3}\frac{1}{1 + e^{-( w_{3}x+b_{3}  )}}+w_{5,4}\frac{1}{1 + e^{-( w_{4}x+b_{4}  )}}+b_5 )}}|    +\large loss(x,y,parámetros)=\frac{1}{N} \sum_{i=1}^{N}|y_i-\frac{1}{1 + e^{-(  w_{5,2}\frac{1}{1 + e^{-( w_{2}x+b_{2}  )}}+w_{5,3}\frac{1}{1 + e^{-( w_{3}x+b_{3}  )}}+w_{5,4}\frac{1}{1 + e^{-( w_{4}x+b_{4}  )}}+b_5 )}}|    
 $$ $$
  
Línea 62: Línea 63:
 import pandas as pd import pandas as pd
 import tensorflow as tf import tensorflow as tf
-from keras.models import Sequential +from tensorflow.keras.models import Sequential 
-from keras.layers import Dense+from tensorflow.keras.layers import Dense
 from sklearn.datasets import load_iris from sklearn.datasets import load_iris
    
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 110: Línea 112:
 La creación de la red neuronal mediante la fórmula es: La creación de la red neuronal mediante la fórmula es:
 <sxh python> <sxh python>
-def sigmoid(x): +def sigmoid(z): 
-    return 1/(1 + np.exp(-x))+    return 1/(1 + np.exp(-z))
    
 def predict_formula(x,w_2,w_3,w_4,w_52,w_53,w_54,b_2,b_3,b_4,b_5): def predict_formula(x,w_2,w_3,w_4,w_52,w_53,w_54,b_2,b_3,b_4,b_5):
Línea 393: Línea 395:
 $$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 411:
 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 436:
 | 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 450:
 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 464:
 ===== 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 499:
  
  
-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 567:
  
  
-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 603:
 {{ :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 631:
  
 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 690:
 <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 738:
 ==== 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 799:
  
 ==== 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.txt · Última modificación: 2024/01/30 15:26 por admin