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 Próxima revisión Ambos lados, revisión siguiente | ||
clase:iabd:pia:2eval:tema07.backpropagation_descenso_gradiente [2023/04/20 14:02] admin [Ejercicios] |
clase:iabd:pia:2eval:tema07.backpropagation_descenso_gradiente [2023/06/10 18:04] admin [Elección del optimizador.] |
||
---|---|---|---|
Línea 684: | Línea 684: | ||
Más información: | Más información: | ||
* [[https:// | * [[https:// | ||
+ | |||
+ | |||
+ | <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 base> | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | Pero hay un truco para que se muestre de forma más amigable, que es sobre escribir la función '' | ||
+ | |||
+ | <sxh python> | ||
+ | tf.keras.optimizers.Optimizer.__str__=lambda self: f' | ||
+ | </ | ||
+ | |||
+ | 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 base> | ||
+ | Adam lr=0.001 | ||
+ | Adamax lr=0.00000001 | ||
+ | </ | ||
+ | |||
+ | |||
+ | </ | ||
Línea 761: | Línea 796: | ||
- | Indica para cada parámetro | + | Indica para cada parámetro: Si la función crece o decrece, el valor de su derivada (positiva o negativa) |
==== Ejercicio 2 ==== | ==== Ejercicio 2 ==== | ||
Línea 849: | Línea 884: | ||
axes_b=subfigure.add_subplot(1, | axes_b=subfigure.add_subplot(1, | ||
- | 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 897: | ||
return perdida_original | return perdida_original | ||
+ | |||
+ | def plot_evolucion_parametros(axes, | ||
+ | axes.plot(ws, | ||
+ | axes.plot(bs, | ||
+ | |||
+ | axes.set_xlabel(' | ||
+ | axes.xaxis.set_major_locator(MaxNLocator(integer=True)) | ||
+ | |||
+ | axes.set_ylabel(' | ||
+ | axes.set_ylim(ymin=-5, | ||
+ | axes.yaxis.set_major_locator(MultipleLocator(1)) | ||
+ | |||
+ | axes.set_title(" | ||
+ | axes.set_facecolor("# | ||
+ | axes.grid(visible=True, | ||
+ | axes.legend() | ||
Línea 869: | Línea 920: | ||
subfigures = figure.subfigures(nrows=len(parametros)+1, | subfigures = figure.subfigures(nrows=len(parametros)+1, | ||
+ | ws=[] | ||
+ | bs=[] | ||
history=[] | history=[] | ||
for index,(w,b) in enumerate(parametros): | for index,(w,b) in enumerate(parametros): | ||
Línea 877: | Línea 930: | ||
loss=plot_losses(x, | loss=plot_losses(x, | ||
+ | ws.append(w) | ||
+ | bs.append(b) | ||
history.append(loss) | history.append(loss) | ||
axes=subfigures[-1].add_subplot(1, | axes=subfigures[-1].add_subplot(1, | ||
plot_simple_metrics(axes, | plot_simple_metrics(axes, | ||
+ | axes=subfigures[-1].add_subplot(1, | ||
+ | plot_evolucion_parametros(axes, | ||
def descenso_gradiente(x, | def descenso_gradiente(x, | ||
Línea 902: | Línea 958: | ||
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 968: | ||
loss=plot_losses(x, | loss=plot_losses(x, | ||
+ | ws.append(w) | ||
+ | bs.append(b) | ||
history.append(loss) | history.append(loss) | ||
w, | w, | ||
Línea 915: | Línea 975: | ||
axes=subfigures[-1].add_subplot(1, | axes=subfigures[-1].add_subplot(1, | ||
plot_simple_metrics(axes, | plot_simple_metrics(axes, | ||
+ | axes=subfigures[-1].add_subplot(1, | ||
+ | plot_evolucion_parametros(axes, | ||
</ | </ | ||