Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:2eval:tema07.backpropagation_descenso_gradiente

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
Próxima revisión Ambos lados, revisión siguiente
clase:iabd:pia:2eval:tema07.backpropagation_descenso_gradiente [2023/04/20 16:22]
admin [Ejercicios]
clase:iabd:pia:2eval:tema07.backpropagation_descenso_gradiente [2024/02/06 17:39]
admin [Tipos de optimizadores en Keras]
Línea 658: Línea 658:
 Más información: Más información:
   * [[https://keras.io/api/optimizers/adam/|Adam]]   * [[https://keras.io/api/optimizers/adam/|Adam]]
 +  * {{ :clase:iabd:pia:2eval:the_math_behind_adam_optimizer.pdf |The Math Behind the Adam Optimizer}}
  
  
Línea 684: Línea 685:
 Más información: Más información:
   * [[https://keras.io/api/optimizers/Nadam/|Nadam]]   * [[https://keras.io/api/optimizers/Nadam/|Nadam]]
 +
 +
 +<note tip>
 +En nuestros proyectos, solemos necesitar mostrar por pantalla el optimizador que estamos usando y normalmente pasa ésto:
 +
 +<sxh python>
 +print(tf.keras.optimizers.Adam(learning_rate=0.001))
 +print(tf.keras.optimizers.Adamax(learning_rate=0.00000001))
 +</sxh>
 +
 +<sxh base>
 +<keras.optimizer_v2.adam.Adam object at 0x7fc4c0d16b60>
 +<keras.optimizer_v2.adamax.Adamax object at 0x7fc4c1db1810>
 +</sxh>
 +
 +Pero hay un truco para que se muestre de forma más amigable, que es sobre escribir la función ''__str__'' de la clase ''Optimizer'':
 +
 +<sxh python>
 +tf.keras.optimizers.Optimizer.__str__=lambda self: f'{self._name} lr=' + f'{self.learning_rate.numpy():.10f}'.rstrip('0')
 +</sxh>
 +
 +Y si volvemos a ejecutar de nuevo el código:
 +
 +<sxh python>
 +print(tf.keras.optimizers.Adam(learning_rate=0.001))
 +print(tf.keras.optimizers.Adamax(learning_rate=0.00000001))
 +</sxh>
 +
 +<sxh base>
 +Adam lr=0.001
 +Adamax lr=0.00000001
 +</sxh>
 +
 +
 +</note>
  
  
Línea 849: Línea 885:
     axes_b=subfigure.add_subplot(1,2,2)        axes_b=subfigure.add_subplot(1,2,2)   
  
-    rango=np.linspace(-4,4,400)+    rango=np.linspace(-5,5,400)
     perdidas_w=[]     perdidas_w=[]
     perdidas_b=[]     perdidas_b=[]
Línea 862: Línea 898:
  
     return perdida_original     return perdida_original
 +
 +def plot_evolucion_parametros(axes,ws,bs):
 +    axes.plot(ws,linestyle="solid",label="w",c="#6ABF40")  
 +    axes.plot(bs,linestyle="solid",label="b",c="#BF9140"    
 +
 +    axes.set_xlabel('Nº Épocas', fontsize=13,color="#003B80"
 +    axes.xaxis.set_major_locator(MaxNLocator(integer=True))
 +
 +    axes.set_ylabel('Valor de los parámetros', fontsize=13,color="#003B80")
 +    axes.set_ylim(ymin=-5,ymax=5)
 +    axes.yaxis.set_major_locator(MultipleLocator(1))
 +
 +    axes.set_title("Evolución de los parámetros en cada época")
 +    axes.set_facecolor("#F0F7FF")
 +    axes.grid(visible=True, which='major', axis='both',color="#FFFFFF",linewidth=2)
 +    axes.legend()
  
  
Línea 869: Línea 921:
     subfigures = figure.subfigures(nrows=len(parametros)+1, ncols=1)     subfigures = figure.subfigures(nrows=len(parametros)+1, ncols=1)
  
 +    ws=[]
 +    bs=[]
     history=[]     history=[]
     for index,(w,b) in enumerate(parametros):     for index,(w,b) in enumerate(parametros):
Línea 877: Línea 931:
  
         loss=plot_losses(x,y_true,w,b,subfigure)         loss=plot_losses(x,y_true,w,b,subfigure)
 +        ws.append(w)
 +        bs.append(b)
         history.append(loss)         history.append(loss)
  
     axes=subfigures[-1].add_subplot(1,2,1)     axes=subfigures[-1].add_subplot(1,2,1)
     plot_simple_metrics(axes,history,"loss")     plot_simple_metrics(axes,history,"loss")
 +    axes=subfigures[-1].add_subplot(1,2,2)  
 +    plot_evolucion_parametros(axes,ws,bs)
  
 def descenso_gradiente(x,y_true,learning_rate,w,b): def descenso_gradiente(x,y_true,learning_rate,w,b):
Línea 902: Línea 959:
     b=b_inicial     b=b_inicial
  
 +    ws=[]
 +    bs=[]
     history=[]     history=[]
     for epoch in range(epochs):     for epoch in range(epochs):
Línea 910: Línea 969:
  
         loss=plot_losses(x,y_true,w,b,subfigure)         loss=plot_losses(x,y_true,w,b,subfigure)
 +        ws.append(w)
 +        bs.append(b)
         history.append(loss)         history.append(loss)
         w,b=descenso_gradiente(x,y_true,learning_rate,w,b)         w,b=descenso_gradiente(x,y_true,learning_rate,w,b)
Línea 915: Línea 976:
     axes=subfigures[-1].add_subplot(1,2,1)     axes=subfigures[-1].add_subplot(1,2,1)
     plot_simple_metrics(axes,history,"loss")     plot_simple_metrics(axes,history,"loss")
 +    axes=subfigures[-1].add_subplot(1,2,2)    
 +    plot_evolucion_parametros(axes,ws,bs)
 </sxh> </sxh>
  
clase/iabd/pia/2eval/tema07.backpropagation_descenso_gradiente.txt · Última modificación: 2024/02/28 15:38 por admin