Processing math: 100%

Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:1eval:tema04

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
clase:iabd:pia:1eval:tema04 [2024/11/15 11:12]
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("Título de la figura") figure.suptitle("Título de la figura")
  
-subfigure_a,subfigure_b = figure.subfigures(nrows=2, ncols=1)+subfigures = figure.subfigures(nrows=2, ncols=1).reshape(-1) 
 +subfigure_a=subfigures[0] 
 +subfigure_b=subfigures[1]
  
 subfigure_a.suptitle("Titulo de la SubFigura A") subfigure_a.suptitle("Titulo de la SubFigura A")
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'] color=next(axes._get_lines.prop_cycler)['color']
 </sxh>  </sxh> 
Línea 1095: Línea 1100:
  
 Como podemos ver hay muchos estilos relacionados con [[https://seaborn.pydata.org/|Seaborn]] Como podemos ver hay muchos estilos relacionados con [[https://seaborn.pydata.org/|Seaborn]]
 +
 +==== 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 ''axes_configure_labels(axes,title,xlabel,ylabel)'' que configura tanto los labels como los colores y tamaños de fuente.
 +
 +<sxh python>
 +def axes_configure_labels(axes,title,xlabel,ylabel):
 +    color="#003B80"
 +    facecolor="#FAFCFF"
 +    gridcolor="#BAD4F2"
 +    tickcolor="#011E32"
 +    fontsize_label=13
 +
 +    axes.set_xlabel(xlabel, fontsize=fontsize_label,color=color)
 +    axes.set_ylabel(ylabel, fontsize=fontsize_label,color=color)
 +    axes.set_title(title,color=color)
 +
 +    axes.set_facecolor(facecolor)
 +    axes.spines['bottom'].set_color(tickcolor)
 +    axes.spines['top'].set_color(tickcolor)
 +    axes.spines['right'].set_color(tickcolor)
 +    axes.spines['left'].set_color(tickcolor)
 +    axes.tick_params(axis='both', colors=tickcolor)
 +
 +    axes.grid(visible=True, which='major', axis='both',color=gridcolor,linewidth=1,zorder=-10)
 +    axes.set_axisbelow(True)
 +
 +    handles, labels = axes.get_legend_handles_labels()
 +    if labels:
 +        axes.legend(fontsize=fontsize_label-2,labelcolor=color)
 +
 +</sxh>
 +
 +
 +  * La siguiente función es ''axes_configure_for_metrics(axes)'' que configura las gráficas para mostrar métricas que van de [01].
 +
 +<sxh python>
 +def axes_configure_axis_for_metrics(axes):
 +    axes.set_xlim(xmin=0,xmax=1)
 +    axes.set_ylim(ymin=0,ymax=1.1)
 +
 +    axes.xaxis.set_major_locator(MultipleLocator(0.1))
 +    axes.yaxis.set_major_locator(MultipleLocator(0.1))
 +</sxh>
 +
 +
 +  * Para mostrar las gráficas de la pérdida en función de las épocas se usarán las funciones ''axes_configure_axis_for_epochs'' y ''plot_history_metric'':
 +
 +
 +<sxh python>
 +def axes_configure_axis_for_epochs(axes,ymax=1):
 +    axes.xaxis.set_major_locator(MaxNLocator(10,integer=True))
 +    axes.yaxis.set_major_locator(LinearLocator(10))
 +    axes.set_ylim(ymin=0,ymax=ymax)
 +</sxh>
 +
 +
 +<sxh python>
 +def plot_history_metric(axes,history,metric_name,label=None,color="#003B80",decimales=2):
 +
 +    if (label==None):
 +        label=metric_name
 +
 +    axes.plot(history[metric_name],linestyle="dotted",c=color,label=f"{label}:{history[metric_name][-1]:.{decimales}f}")  
 +    axes.plot(history['val_'+metric_name],linestyle="solid",c=color,label=f"Valid. {label}:{history['val_'+metric_name][-1]:.{decimales}f}"
 +    
 +    
 +</sxh>
 +
 +Usándose así:
 +
 +<sxh python>
 +figure=plt.figure(figsize=(6, 3.5))
 +axes=figure.add_subplot(1,1,1)
 +
 +plot_history_metric(axes,history.history,"loss",decimales=6)
 +axes_configure_labels(axes,"loss por épocas","Nº Épocas","Loss")
 +axes_configure_axis_for_epochs(axes,1.1)
 +</sxh>
 +
 +
 ===== Ejercicios ===== ===== Ejercicios =====
  
Línea 1758: Línea 1845:
  
 $$ $$
-loss=Perdida=error \: medio=\frac{1}{N} \sum_{i=1}^{N} (y_{true}-y_{score})=\frac{1}{N} \sum_{i=1}^{N} (pib_{true}-pib_{predicho})+loss=Perdida=error \: medio=\frac{1}{N} \sum_{i=1}^{N} |y_{true}-y_{score}|^{2}=\frac{1}{N} \sum_{i=1}^{N} |pib_{true}-pib_{predicho}|^{2}
 $$ $$
  
Línea 1903: Línea 1990:
 {{:clase:iabd:pia:1eval:pib_modelo_red_neuronal_monitorizacion.png|}} {{:clase:iabd:pia:1eval:pib_modelo_red_neuronal_monitorizacion.png|}}
  
 +=== 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 ''model.compile'' de la siguiente forma:
 +<sxh python>
 +model.compile(loss='mean_squared_error',metrics=[tf.keras.metrics.R2Score()])
 +</sxh>
 +
 +Se usa de la siguiente forma:
 +  * Obtener el R² para cada época en el entrenamiento
 +<sxh python>
 +r2_score=history.history['r2_score']
 +</sxh>
 +
 +  * Obtener el R² para cada época en validación
 +<sxh python>
 +r2_score_validacion=history.history['val_r2_score']
 +</sxh>
 +
 +
 +
 +{{:clase:iabd:pia:1eval:boston_loss_metrics_300_epocas.png|}}
 +
 +
 +<sxh python>
 +redes_neuronales=[
 +    [[20,1],"relu"],
 +    [[20,1],"selu"],
 +    [[20,1],"tanh"],       
 +    [[20,10,1],"relu"],
 +    [[20,10,1],"selu"],
 +    [[20,10,1],"tanh"],        
 +    [[20,30,10,1],"relu"],
 +    [[20,30,10,1],"selu"],
 +    [[20,30,10,1],"tanh"],  
 +    [[20,40,80,40,20,1],"relu"],
 +    [[20,40,80,40,20,1],"selu"],
 +    [[20,40,80,40,20,1],"tanh"],
 +    [[20,40,80,160,80,40,20,1],"relu"],
 +    [[20,40,80,160,80,40,20,1],"selu"],
 +    [[20,40,80,160,80,40,20,1],"tanh"                              
 +]                             
 +
 +epochs=300
 +</sxh>
 +
 +<sxh base>
 +  Nombre  Capas                               Épocas  Activación                MSE               R²           Tiempo           MSE            R²
 +     Red                                                              Entrenamiento    Entrenamiento    Entrenamiento    Validación    Validación
 +--------  --------------------------------  --------  ------------  ---------------  ---------------  ---------------  ------------  ------------
 +        [20, 1]                                300  relu                 25.9903        0.700825            13.2181       24.1596     0.670553
 +        [20, 1]                                300  selu                 23.1742        0.733241            12.6924       21.8751     0.701705
 +        [20, 1]                                300  tanh                 69.747         0.197143            12.3714       61.0294     0.167786
 +        [20, 10, 1]                            300  relu                 24.5118        0.717845            12.8602       26.5133     0.638458
 +        [20, 10, 1]                            300  selu                 23.5015        0.729474            12.4664       23.3333     0.681821
 +        [20, 10, 1]                            300  tanh                 59.5199        0.314867            12.466        51.4849     0.297938
 +        [20, 30, 10, 1]                        300  relu                 13.5217        0.844352            13.0145       17.7428     0.758054
 +        [20, 30, 10, 1]                        300  selu                 11.4235        0.868504            12.895        16.8747     0.769892
 +        [20, 30, 10, 1]                        300  tanh                 59.6715        0.313121            12.7907       50.0339     0.317724
 +      10  [20, 40, 80, 40, 20, 1]                300  relu                 11.639         0.866023            13.8727       15.3683     0.790433
 +      11  [20, 40, 80, 40, 20, 1]                300  selu                 19.7779        0.772336            13.6373       26.7263     0.635553
 +      12  [20, 40, 80, 40, 20, 1]                300  tanh                 55.5066        0.361063            13.6796       50.5201     0.311094
 +      13  [20, 40, 80, 160, 80, 40, 20, 1]       300  relu                 22.3828        0.742352            13.9058       27.3831     0.626596
 +      14  [20, 40, 80, 160, 80, 40, 20, 1]       300  selu                  6.17364       0.928935            14.0711       17.3759     0.763057
 +      15  [20, 40, 80, 160, 80, 40, 20, 1]       300  tanh                 86.8736       -2.5034e-06          14.0382       75.0856    -0.0238888
 +
 +</sxh>
 +
 +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.
 +
 +{{:clase:iabd:pia:1eval:boston_loss_metrics_10_epocas.png|}}
  
 +Para cada una de las redes indicas si podrías "intuir" si va a ser una buena red después de 300 épocas
  
  
clase/iabd/pia/1eval/tema04.1731665563.txt.gz · Última modificación: 2024/11/15 11:12 por admin