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/11 16:58] admin [7. Entrenamiento de redes neuronales a) Funciones de coste] |
clase:iabd:pia:2eval:tema07 [2024/01/30 15:26] admin [Distancia del coseno] |
||
---|---|---|---|
Línea 71: | 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 350: | 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 357: | 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 394: | 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 405: | Línea 417: | ||
Mas información: | Mas información: | ||
* [[https:// | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
* [[https:// | * [[https:// | ||
Línea 428: | 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 441: | 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 455: | 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 490: | 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 552: | 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 588: | 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 614: | 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 669: | 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 712: | 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 770: | 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: |