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:1eval:tema04 [2024/11/15 00:44] admin [Mini-proyecto] |
clase:iabd:pia:1eval:tema04 [2025/03/22 13:06] (actual) admin [Personalización] |
||
---|---|---|---|
Línea 261: | Línea 261: | ||
figure.suptitle(" | figure.suptitle(" | ||
- | subfigure_a, | + | subfigures |
+ | subfigure_a=subfigures[0] | ||
+ | subfigure_b=subfigures[1] | ||
subfigure_a.suptitle(" | subfigure_a.suptitle(" | ||
Línea 841: | Línea 843: | ||
También podemos obtener el siguiente color que vamos a usar con: | También podemos obtener el siguiente color que vamos a usar con: | ||
<sxh python> | <sxh python> | ||
+ | #Versiones nuevas | ||
+ | color=axes._get_lines.get_next_color() | ||
+ | #Versiones antiguas | ||
color=next(axes._get_lines.prop_cycler)[' | color=next(axes._get_lines.prop_cycler)[' | ||
</ | </ | ||
Línea 1095: | Línea 1100: | ||
Como podemos ver hay muchos estilos relacionados con [[https:// | Como podemos ver hay muchos estilos relacionados con [[https:// | ||
+ | |||
+ | ==== Definir el propio estilo ==== | ||
+ | Normalmente queremos que todas nuestras gráficas tengan un mismo estilo , por ello es bueno crear una serie de funciones estándar que siempre usaremos. | ||
+ | |||
+ | * La primera función que usamos se llama '' | ||
+ | |||
+ | <sxh python> | ||
+ | def axes_configure_labels(axes, | ||
+ | color="# | ||
+ | facecolor="# | ||
+ | gridcolor="# | ||
+ | tickcolor="# | ||
+ | fontsize_label=13 | ||
+ | |||
+ | axes.set_xlabel(xlabel, | ||
+ | axes.set_ylabel(ylabel, | ||
+ | axes.set_title(title, | ||
+ | |||
+ | axes.set_facecolor(facecolor) | ||
+ | axes.spines[' | ||
+ | axes.spines[' | ||
+ | axes.spines[' | ||
+ | axes.spines[' | ||
+ | axes.tick_params(axis=' | ||
+ | |||
+ | axes.grid(visible=True, | ||
+ | axes.set_axisbelow(True) | ||
+ | |||
+ | handles, labels = axes.get_legend_handles_labels() | ||
+ | if labels: | ||
+ | axes.legend(fontsize=fontsize_label-2, | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | * La siguiente función es '' | ||
+ | |||
+ | <sxh python> | ||
+ | def axes_configure_axis_for_metrics(axes): | ||
+ | axes.set_xlim(xmin=0, | ||
+ | axes.set_ylim(ymin=0, | ||
+ | |||
+ | axes.xaxis.set_major_locator(MultipleLocator(0.1)) | ||
+ | axes.yaxis.set_major_locator(MultipleLocator(0.1)) | ||
+ | </ | ||
+ | |||
+ | |||
+ | * Para mostrar las gráficas de la pérdida en función de las épocas se usarán las funciones '' | ||
+ | |||
+ | |||
+ | <sxh python> | ||
+ | def axes_configure_axis_for_epochs(axes, | ||
+ | axes.xaxis.set_major_locator(MaxNLocator(10, | ||
+ | axes.yaxis.set_major_locator(LinearLocator(10)) | ||
+ | axes.set_ylim(ymin=0, | ||
+ | </ | ||
+ | |||
+ | |||
+ | <sxh python> | ||
+ | def plot_history_metric(axes, | ||
+ | |||
+ | if (label==None): | ||
+ | label=metric_name | ||
+ | |||
+ | axes.plot(history[metric_name], | ||
+ | axes.plot(history[' | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Usándose así: | ||
+ | |||
+ | <sxh python> | ||
+ | figure=plt.figure(figsize=(6, | ||
+ | axes=figure.add_subplot(1, | ||
+ | |||
+ | plot_history_metric(axes, | ||
+ | axes_configure_labels(axes," | ||
+ | axes_configure_axis_for_epochs(axes, | ||
+ | </ | ||
+ | |||
+ | |||
===== Ejercicios ===== | ===== Ejercicios ===== | ||
Línea 1758: | Línea 1845: | ||
$$ | $$ | ||
- | loss=Perdida=error \: medio=\frac{1}{N} \sum_{i=1}^{N} | + | loss=Perdida=error \: medio=\frac{1}{N} \sum_{i=1}^{N} |
$$ | $$ | ||
Línea 1773: | Línea 1860: | ||
Así que resulta que no hace falta que nosotros calculemos el **Mean Squared Error** porque ya lo hace keras por nosotros. | Así que resulta que no hace falta que nosotros calculemos el **Mean Squared Error** porque ya lo hace keras por nosotros. | ||
- | La forma de acceder a ese valor es la siguiente: | + | La forma de acceder a ese valor es la siguiente, el método '' |
+ | |||
+ | <sxh python> | ||
+ | history=model.fit(x, | ||
+ | </ | ||
<sxh python> | <sxh python> | ||
Línea 1782: | Línea 1873: | ||
=== Paso 7 === | === Paso 7 === | ||
- | Ahora muestra una gráfica con todos los valores de //loss// para que veas como va evolucionando la pérdida a medida que se va entrenando la red | + | Ahora muestra una gráfica con todos los valores de //loss// para que veas como va evolucionando la pérdida a medida que se va entrenando la red en cada época |
Y muestra la última perdida | Y muestra la última perdida | ||
Línea 1832: | Línea 1923: | ||
<sxh python> | <sxh python> | ||
- | [[ 1.22140488 , 59.35315077] , [ 2.42834632 , 3.50613409] , [ 4.27529991 , 70.39938914] , | + | def get_datos_validacion(): |
+ | datos_validacion=np.array( | ||
+ | | ||
[ 14.44651349 , 50.0606769 ] , [ 16.10795855 , 81.08562061] , [ 16.75024181 , 33.95365822] , | [ 14.44651349 , 50.0606769 ] , [ 16.10795855 , 81.08562061] , [ 16.75024181 , 33.95365822] , | ||
[ 26.80487149 , 47.1495392 ] , [ 28.81517859 , | [ 26.80487149 , 47.1495392 ] , [ 28.81517859 , | ||
Línea 1839: | Línea 1932: | ||
[ 84.56808303 , | [ 84.56808303 , | ||
[ 93.53406333 , | [ 93.53406333 , | ||
+ | ) | ||
+ | return datos_validacion | ||
</ | </ | ||
Línea 1846: | Línea 1941: | ||
{{: | {{: | ||
+ | |||
=== Paso 11 === | === Paso 11 === | ||
+ | Estos nuevos datos se pueden incluir también en el método '' | ||
+ | |||
+ | <sxh python> | ||
+ | history=model.fit(x, | ||
+ | </ | ||
+ | |||
+ | Para acceder desde '' | ||
+ | |||
+ | <sxh python> | ||
+ | val_loss=history.history[' | ||
+ | </ | ||
+ | |||
+ | Muestra ahora una nueva figura con la perdida tanto en entrenamiento como en validación y los datos. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | === Paso 12 === | ||
Muestra la gráfica con los datos originales pero que el resultado de la red sea hasta 200 | Muestra la gráfica con los datos originales pero que el resultado de la red sea hasta 200 | ||
{{: | {{: | ||
- | === Paso 12 === | + | |
+ | |||
+ | === Paso 13 === | ||
Ahora vamos a hacer predicciones en el modelo y comprobar si hay algún problema a lo largo del tiempo. | Ahora vamos a hacer predicciones en el modelo y comprobar si hay algún problema a lo largo del tiempo. | ||
Para ello vamos a realizar 300 predicciones semanales y obtener la media y la desviación estándar de todas las predicciones de una semana. | Para ello vamos a realizar 300 predicciones semanales y obtener la media y la desviación estándar de todas las predicciones de una semana. | ||
Línea 1873: | Línea 1988: | ||
- | {{: | + | {{: |
+ | |||
+ | === Paso 14 === | ||
+ | Siguiendo con el DataSet de los precios de viviendas en la ciudad de Boston, vamos a mostrar las gráficas con | ||
+ | las pérdidas y la métrica del Coeficiente de determinación o R² de todas las redes neuronales que se entrenaron en el tema anterior (entrenamiento y validación) | ||
+ | |||
+ | Para poder mostrar el Coeficiente de determinación o R² deberemos modificar el método '' | ||
+ | <sxh python> | ||
+ | model.compile(loss=' | ||
+ | </ | ||
+ | |||
+ | Se usa de la siguiente forma: | ||
+ | * Obtener el R² para cada época en el entrenamiento | ||
+ | <sxh python> | ||
+ | r2_score=history.history[' | ||
+ | </ | ||
+ | |||
+ | * Obtener el R² para cada época en validación | ||
+ | <sxh python> | ||
+ | r2_score_validacion=history.history[' | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | <sxh python> | ||
+ | redes_neuronales=[ | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | [[20, | ||
+ | ] | ||
+ | |||
+ | epochs=300 | ||
+ | </ | ||
+ | |||
+ | <sxh base> | ||
+ | Nombre | ||
+ | | ||
+ | -------- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 10 [20, 40, 80, 40, 20, 1] 300 relu | ||
+ | 11 [20, 40, 80, 40, 20, 1] 300 selu | ||
+ | 12 [20, 40, 80, 40, 20, 1] 300 tanh | ||
+ | 13 [20, 40, 80, 160, 80, 40, 20, 1] | ||
+ | 14 [20, 40, 80, 160, 80, 40, 20, 1] | ||
+ | 15 [20, 40, 80, 160, 80, 40, 20, 1] | ||
+ | |||
+ | </ | ||
+ | |||
+ | Para cada una de las redes indica: | ||
+ | * Si tiene unas buenas métricas en la última época | ||
+ | * Si es buena o mala red , es decir si la elegirías. Explica el motivo | ||
+ | * Compara los resultados con los del tema anterior ¿Porque hay esas variaciones? | ||
+ | |||
+ | === Paso 15 === | ||
+ | Repite el ejercicio anterior pero ahora solo para 10 épocas y muestra solo la pérdida en entrenamiento y validación. | ||
+ | {{: | ||
+ | Para cada una de las redes indicas si podrías " | ||