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:tema06 [2024/12/17 21:24] admin [Recreando la red neuronal] |
clase:iabd:pia:1eval:tema06 [2025/05/16 12:24] (actual) admin [Recreando la red neuronal] |
||
---|---|---|---|
Línea 495: | Línea 495: | ||
b_5 =get_b(model, | b_5 =get_b(model, | ||
- | print(w_2,w_3,w_4,w_52,w_53,w_54,b_2,b_3,b_4,b_5) | + | print(f"w_2={w_2}\nw_3={w_3}\nw_4={w_4}\nw_52={w_52}\nw_53={w_53}\nw_54={w_54}\nb_2={b_2}\nb_3={b_3}\nb_4={b_4}\nb_5={b_5}") |
</ | </ | ||
Línea 501: | Línea 501: | ||
<sxh text> | <sxh text> | ||
- | 0.5020887 -0.24834822 | + | w_2=0.49803927540779114 |
+ | w_3=0.4119996428489685 | ||
+ | w_4=-0.46713322401046753 | ||
+ | w_52=0.8982692956924438 | ||
+ | w_53=-0.0004859123146161437 | ||
+ | w_54=0.3734080493450165 | ||
+ | b_2=-0.3795720934867859 | ||
+ | b_3=-0.20187339186668396 | ||
+ | b_4=-0.3774943947792053 | ||
+ | b_5=-0.3136947453022003 | ||
</ | </ | ||
+ | |||
+ | y5=11+e−(0.8982⋅11+e−(0.4980x−0.3795)+(−0.0004)⋅11+e−(0.4119x−0.2018)+0.3734⋅11+e−(−0.4671x−0.3774)+(−0.3136)) | ||
Por fin vamos a crear la fórmula que hará las predicciones pero usando únicamente los parámetros en vez de la red neuronal, para ello hemos creado la función '' | Por fin vamos a crear la fórmula que hará las predicciones pero usando únicamente los parámetros en vez de la red neuronal, para ello hemos creado la función '' | ||
Línea 1001: | Línea 1012: | ||
| Clasificación con más de 2 posibles valores SI excluyentes entre si | Softmax | | Clasificación con más de 2 posibles valores SI excluyentes entre si | Softmax | ||
+ | |||
+ | <note tip> | ||
+ | **La sigmoide es un caso particular de Softmax con 2 neuronas** | ||
+ | |||
+ | Uno se puede preguntar en redes en las solo queremos saber si es positivo/ | ||
+ | porqué en vez de usar una única neurona con sigmoide, no usamos softmax con 2 valores. ¿Sería lo mismo? Pues vamos a desarrollarlo. | ||
+ | |||
+ | * Imaginemos una única neurona que acaba en sigmoide. | ||
+ | |||
+ | $$ | ||
+ | z_1: | ||
+ | \\ | ||
+ | y_1: | ||
+ | \\ | ||
+ | y_1=sigmoid(z_1)=\frac{1}{1+e^{-z_1}} | ||
+ | $$ | ||
+ | |||
+ | * Ahora vamos a tener 2 neuronas de forma que la primera neurona de el mismo resultado que cuando solo hay una neurona | ||
+ | |||
+ | $$ | ||
+ | z_1: | ||
+ | \\ | ||
+ | y_1: | ||
+ | \\ | ||
+ | y_1=softmax(z_1)=\frac{e^{z_1}}{e^{z_1}+e^{z_2}} | ||
+ | $$ | ||
+ | |||
+ | $$ | ||
+ | z_2: | ||
+ | \\ | ||
+ | y_2: | ||
+ | \\ | ||
+ | y_2=softmax(z_2)=\frac{e^{z_2}}{e^{z_1}+e^{z_2}} | ||
+ | $$ | ||
+ | |||
+ | * Además se debe cumplir que | ||
+ | |||
+ | $$ | ||
+ | y_1+y_2=1 | ||
+ | $$ | ||
+ | |||
+ | Ya que la probabilidad de ser positivo o ser negativo debe sumar 1. | ||
+ | |||
+ | * Como ambas redes deben tener el mismo resultado en la 1º reurona se cumple que | ||
+ | |||
+ | $$ | ||
+ | \frac{1}{1+e^{-z_1}}=\frac{e^{z_1}}{e^{z_1}+e^{z_2}} | ||
+ | $$ | ||
+ | |||
+ | * Y ahora vamos a despejar cuando debe valer z2 para que se cumple esa igualdad y para ello multiplicamos en cruz | ||
+ | |||
+ | $$ | ||
+ | e^{z_1}+e^{z_1-z_1}=e^{z_1}+e^{z_2} | ||
+ | $$ | ||
+ | |||
+ | $$ | ||
+ | e^{z_1}+e^{0}=e^{z_1}+e^{z_2} | ||
+ | $$ | ||
+ | |||
+ | $$ | ||
+ | e^{z_1}+1=e^{z_1}+e^{z_2} | ||
+ | $$ | ||
+ | |||
+ | $$ | ||
+ | 1=e^{z_2} | ||
+ | $$ | ||
+ | |||
+ | $$ | ||
+ | \ln{1}=\ln{e^{z_2}} | ||
+ | $$ | ||
+ | |||
+ | |||
+ | $$ | ||
+ | z_2=0 | ||
+ | $$ | ||
+ | |||
+ | Por lo tanto: | ||
+ | |||
+ | $$ | ||
+ | y_1=\frac{e^{z_1}}{e^{z_1}+1}=\frac{1}{1+e^{-z_1}} | ||
+ | $$ | ||
+ | |||
+ | Es decir que la 2º neurona siempre debe valer 0 en la parte lineal. z2=0 | ||
+ | |||
+ | * ¿Pero que valor tendrá realmente a la salida de la 2º neurona? | ||
+ | |||
+ | $$ | ||
+ | y_2=softmax(z_2)=\frac{e^{z_2}}{e^{z_1}+e^{z_2}} | ||
+ | $$ | ||
+ | |||
+ | $$ | ||
+ | y_2=\frac{e^{0}}{e^{z_1}+e^{0}} | ||
+ | $$ | ||
+ | |||
+ | $$ | ||
+ | y_2=\frac{1}{1+e^{z_1}} | ||
+ | $$ | ||
+ | |||
+ | * Pero, ¿es ese valor realmente el complementario de y1. Es decir ¿y1+y2=1? | ||
+ | |||
+ | $$ | ||
+ | y_1=\frac{1}{1+e^{-z_1}} | ||
+ | \\ | ||
+ | y_2=\frac{1}{1+e^{z_1}} | ||
+ | $$ | ||
+ | |||
+ | $$ | ||
+ | y_1+y_2=\frac{1}{1+e^{-z_1}}+\frac{1}{1+e^{z_1}}= | ||
+ | $$ | ||
+ | |||
+ | $$ | ||
+ | \frac{1+e^{z_1}+1+e^{-z_1}}{(1+e^{-z_1})(1+e^{z_1})}= | ||
+ | $$ | ||
+ | |||
+ | $$ | ||
+ | \frac{2+e^{z_1}+e^{-z_1}}{1+e^{-z_1}+e^{z_1}+e^{z_1-z_1}}= | ||
+ | $$ | ||
+ | |||
+ | $$ | ||
+ | \frac{2+e^{z_1}+e^{-z_1}}{1+e^{-z_1}+e^{z_1}+e^{0}}= | ||
+ | $$ | ||
+ | $$ | ||
+ | \frac{2+e^{z_1}+e^{-z_1}}{1+e^{-z_1}+e^{z_1}+1}= | ||
+ | $$ | ||
+ | |||
+ | $$ | ||
+ | \frac{2+e^{z_1}+e^{-z_1}}{2+e^{z_1}+e^{-z_1}}=1 | ||
+ | $$ | ||
+ | |||
+ | </ | ||
Línea 1008: | Línea 1149: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | |||
Línea 1022: | Línea 1164: | ||
model.compile(loss=" | model.compile(loss=" | ||
history=model.fit(x_train, | history=model.fit(x_train, | ||
- | |||
model.save(' | model.save(' | ||
Línea 1031: | Línea 1172: | ||
<sxh python> | <sxh python> | ||
model=tf.keras.models.load_model(' | model=tf.keras.models.load_model(' | ||
- | |||
</ | </ | ||
Línea 1037: | Línea 1177: | ||
<sxh python> | <sxh python> | ||
model=tf.keras.models.load_model(' | model=tf.keras.models.load_model(' | ||
+ | |||
</ | </ | ||