Muestra las diferencias entre dos versiones de la página.
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 tip>A las funciones de coste también se les llama funciones de pérdida o //loss// en inglés.</ | ||
- | $$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 | ||
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 |
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: | ||
{{ : | {{ : | ||
+ | |||
+ | |||
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, | 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, | ||
+ | |||
+ | Lo mismo se puede aplicar a un partido de papel: | ||
+ | |||
+ | {{ : | ||
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}$ | + | Los valores |
+ | |||
+ | Veamos ahora graficamente como es la fórmula según si $y=0$ o $y=1$ | ||
+ | {{: | ||
+ | |||
Su uso en Keras es: | Su uso en Keras es: | ||
Línea 404: | Línea 417: | ||
Mas información: | Mas información: | ||
* [[https:// | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
* [[https:// | * [[https:// | ||
Línea 427: | Línea 442: | ||
| Regresión | | Regresión | ||
| Clasificación con 2 posibles valores | Sigmoide | | Clasificación con 2 posibles valores | Sigmoide | ||
- | | Clasificación con más de 2 posibles valores | Softmax | + | | Clasificación con más de 2 posibles valores |
+ | | Clasificación con más de 2 posibles valores SI excluyentes entre si | Softmax | ||
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 '' | + | Haz un programa en python que calcule **mediante las fórmulas** la pérdida de la red con '' |
+ | ==== 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: | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
==== 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 '' | + | Calcula la pérdida de las 2 redes con '' |
- | ^ ^ MAE ^ MSE ^ | + | ^ ^ MAE ^ MSE |
- | ^ 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: | ||
{{ : | {{ : | ||
+ | <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 '' | ||
+ | </ | ||
==== 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 '' | ||
+ | </ | ||
==== Ejercicio 5.A ==== | ==== Ejercicio 5.A ==== | ||
Línea 668: | Línea 696: | ||
<sxh python> | <sxh python> | ||
df = df.pivot(index=' | df = df.pivot(index=' | ||
+ | </ | ||
+ | |||
+ | muestra el heatmap | ||
+ | <sxh python> | ||
+ | sns.heatmap(df, | ||
</ | </ | ||
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 | + | * Estructura |
- | * Funciones de pérdida: MSE, MAE, Binary Crossentropy, | + | * [3] |
+ | * [4, 3] | ||
+ | * [4, 8, 3] | ||
+ | * [4, 8, 16, 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 '' | ||
- | <note tip> | ||
- | La función de activación de la última capa siempre debe ser '' | ||
- | </ | ||
- | |||
- | La gráfica resultante debe ser similar a ésta: | ||
- | |||
- | {{ : | ||
Responde las siguientes cuestiones: | Responde las siguientes cuestiones: | ||
- | | + | * ¿Cual ha resultado ser la mejor estructura |
- | | + | * ¿Cual ha sido la mejor función de activación |
- | * ¿Cual ha sido la peor función de activación? | + | |
- | * ¿Cual ha sido la mejor/es funció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 | + | Crea y entrena una red neuronal que averigüe si tiene cáncer de mama. Los datos los obtendrás |
- | 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. | + | </ |
Deberás: | Deberás: |