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 Última revisión Ambos lados, revisión siguiente | ||
clase:iabd:pia:2eval:tema07 [2022/03/17 10:05] 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 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 50: | Línea 51: | ||
$$ | $$ | ||
- | \large loss=loss\_function(x, | + | \large loss(x, |
$$ | $$ | ||
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 | ||
- | iris=load_iris() | ||
- | x=iris.data[0: | ||
- | y_true=iris.target[0: | ||
- | np.random.seed(5) | + | def get_model(loss): |
- | tf.random.set_seed(5) | + | |
- | + | tf.random.set_seed(5) | |
- | model=Sequential() | + | |
- | model.add(Dense(3, | + | |
- | model.add(Dense(1, | + | model=Sequential() |
- | model.compile(loss=' | + | model.add(Dense(3, |
- | history=model.fit(x, y_true, | + | model.add(Dense(1, |
+ | model.compile(loss=loss) | ||
+ | |||
+ | return | ||
</ | </ | ||
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, | def predict_formula(x, | ||
Línea 136: | Línea 138: | ||
<sxh python> | <sxh python> | ||
+ | iris=load_iris() | ||
+ | x=iris.data[0: | ||
+ | y_true=iris.target[0: | ||
+ | |||
+ | model=get_model(" | ||
+ | history=model.fit(x, | ||
+ | |||
w_2, | w_2, | ||
y_pred=predict_formula(x, | y_pred=predict_formula(x, | ||
Línea 386: | 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}$ | + | 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 397: | Línea 411: | ||
Mas información: | Mas información: | ||
* [[https:// | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
* [[https:// | * [[https:// | ||
Línea 420: | Línea 436: | ||
| 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 433: | 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 447: | 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 482: | Línea 499: | ||
- | 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 544: | Línea 567: | ||
- | 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 580: | Línea 603: | ||
{{ : | {{ : | ||
+ | <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 606: | 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 '' | ||
+ | </ | ||
==== Ejercicio 5.A ==== | ==== Ejercicio 5.A ==== | ||
Línea 661: | Línea 690: | ||
<sxh python> | <sxh python> | ||
df = df.pivot(index=' | df = df.pivot(index=' | ||
+ | </ | ||
+ | |||
+ | muestra el heatmap | ||
+ | <sxh python> | ||
+ | sns.heatmap(df, | ||
</ | </ | ||
Línea 702: | Línea 736: | ||
* Averiguar la cifra que se ha escrito una persona a mano. | * Averiguar la cifra que se ha escrito una persona a mano. | ||
- | ==== Ejercicio 7.A ==== | + | ==== Ejercicio 7 ==== |
+ | Crea una red neuronal para entrenar las flores. Tienes que entrenarla durante 300 épocas con todas las combinaciones de: | ||
+ | * Estructura de la red: | ||
+ | * [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 | ||
+ | |||
+ | |||
+ | |||
+ | Responde las siguientes cuestiones: | ||
+ | * ¿Cual ha resultado ser la mejor estructura de red? | ||
+ | * ¿Cual ha sido la mejor función de activación para la mejor estructura de red? | ||
+ | |||
+ | ==== Ejercicio 8.A ==== | ||
Crea y entrena una red neuronal que averigüe si un paciente tendrá diabetes. Los datos los obtendrás con la función '' | Crea y entrena una red neuronal que averigüe si un paciente tendrá diabetes. Los datos los obtendrás con la función '' | ||
Línea 714: | Línea 772: | ||
* Elegir adecuadamente la función de coste a usar | * Elegir adecuadamente la función de coste a usar | ||
- | ==== Ejercicio | + | ==== Ejercicio |
Crea y entrena una red neuronal que averigüe el dígito que ha escrito una persona. Los datos los obtendrás con la función '' | Crea y entrena una red neuronal que averigüe el dígito que ha escrito una persona. Los datos los obtendrás con la función '' | ||
Línea 727: | Línea 785: | ||
* Elegir adecuadamente la función de coste a usar | * Elegir adecuadamente la función de coste a usar | ||
- | ==== Ejercicio | + | ==== Ejercicio |
Crea y entrena una red neuronal que averigüe el tipo de un vino. Los datos los obtendrás con la función '' | Crea y entrena una red neuronal que averigüe el tipo de un vino. Los datos los obtendrás con la función '' | ||
Línea 740: | Línea 798: | ||
* Elegir adecuadamente la función de coste a usar | * Elegir adecuadamente la función de coste a usar | ||
- | ==== Ejercicio | + | ==== Ejercicio |
- | 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 7.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: |