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/01/21 20:09] (actual) admin [Guardando modelos a disco] |
||
---|---|---|---|
Línea 498: | Línea 498: | ||
</ | </ | ||
- | <sxh text; | + | * Y muestra por pantalla los valores de cada parámetro: |
+ | |||
+ | <sxh text> | ||
0.5020887 -0.24834822 0.57721144 0.6283854 -1.241883 0.28643206 -0.2868785 0.085751235 -0.35422727 -0.05326964 | 0.5020887 -0.24834822 0.57721144 0.6283854 -1.241883 0.28643206 -0.2868785 0.085751235 -0.35422727 -0.05326964 | ||
</ | </ | ||
Línea 999: | Línea 1001: | ||
| 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 $z_2$ 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. $z_2=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 $y_1$. Es decir $¿y_1+y_2=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 1006: | Línea 1138: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | |||
Línea 1020: | Línea 1153: | ||
model.compile(loss=" | model.compile(loss=" | ||
history=model.fit(x_train, | history=model.fit(x_train, | ||
- | |||
model.save(' | model.save(' | ||
Línea 1029: | Línea 1161: | ||
<sxh python> | <sxh python> | ||
model=tf.keras.models.load_model(' | model=tf.keras.models.load_model(' | ||
- | |||
</ | </ | ||
Línea 1035: | Línea 1166: | ||
<sxh python> | <sxh python> | ||
model=tf.keras.models.load_model(' | model=tf.keras.models.load_model(' | ||
+ | |||
</ | </ | ||