Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:1eval:tema06

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: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> </sxh>
  
-<sxh text;title:Resultado>+  * 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
 </sxh> </sxh>
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/negativo, es decir con dos valores,
 +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:\text{Es la salida de la parte lineal de la única neurona}
 +\\
 +y_1:\text{Es la salida de la única neurona}
 +\\
 +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:\text{Es la salida de la parte lineal de la 1º neurona}
 +\\
 +y_1:\text{Es la salida de la 1º neurona}
 +\\
 +y_1=softmax(z_1)=\frac{e^{z_1}}{e^{z_1}+e^{z_2}}
 +$$
 +
 +$$
 +z_2:\text{Es la salida de la parte lineal de la 2º neurona}
 +\\
 +y_2:\text{Es la salida de la 2º neurona}
 +\\
 +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
 +$$
 +
 +</note>
  
  
Línea 1006: Línea 1138:
   * [[https://towardsdatascience.com/the-big-issue-with-softmax-cd6169fede8f|The Big Issue With Softmax]]   * [[https://towardsdatascience.com/the-big-issue-with-softmax-cd6169fede8f|The Big Issue With Softmax]]
   * [[https://towardsdatascience.com/softmax-regression-in-python-multi-class-classification-3cb560d90cb2|Softmax Regression in Python: Multi-class Classification]]   * [[https://towardsdatascience.com/softmax-regression-in-python-multi-class-classification-3cb560d90cb2|Softmax Regression in Python: Multi-class Classification]]
 +
  
  
Línea 1020: Línea 1153:
 model.compile(loss="mse") model.compile(loss="mse")
 history=model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=10,verbose=False) history=model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=10,verbose=False)
- 
  
 model.save('my_red_neuronal.keras' model.save('my_red_neuronal.keras'
Línea 1029: Línea 1161:
 <sxh python> <sxh python>
 model=tf.keras.models.load_model('my_red_neuronal.keras') model=tf.keras.models.load_model('my_red_neuronal.keras')
- 
 </sxh> </sxh>
  
Línea 1035: Línea 1166:
 <sxh python> <sxh python>
 model=tf.keras.models.load_model('my_red_neuronal.keras',custom_objects={"specificity": specificity}) model=tf.keras.models.load_model('my_red_neuronal.keras',custom_objects={"specificity": specificity})
 +
 </sxh> </sxh>
  
clase/iabd/pia/1eval/tema06.1734467045.txt.gz · Última modificación: 2024/12/17 21:24 por admin