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 [2022/03/30 08:47]
admin [Tipos de funciones de activación en capas ocultas]
clase:iabd:pia:1eval:tema06 [2024/03/25 15:06] (actual)
admin [Tipos de funciones de activación en la capa de salida]
Línea 46: Línea 46:
  
  
-$$\vec{y}=\vec{w}^{ \, \intercal} \cdot \vec{x}+b$$+$$y=\vec{w}^{ \, \intercal} \cdot \vec{x}+b$$
  
  
Línea 451: Línea 451:
 np.random.seed(5) np.random.seed(5)
 tf.random.set_seed(5) tf.random.set_seed(5)
 +random.seed(5)  
  
 model=Sequential() model=Sequential()
Línea 501: Línea 501:
  
 <sxh python> <sxh python>
-def sigmoid(x): +def sigmoid(z): 
-    return 1/(1 + np.exp(-x))+    return 1/(1 + np.exp(-z))
  
 def predict_formula(x): def predict_formula(x):
Línea 702: Línea 702:
   * Uso en Keras: Sigmoide   * Uso en Keras: Sigmoide
 <sxh python> <sxh python>
-model.add(Dense(3, input_dim=1,activation=tf.keras.activations.sigmoid)) +model.add(Dense(3, activation="sigmoid")) 
-model.add(Dense(3, input_dim=1,activation="sigmoid"))+model.add(Dense(3, activation=tf.keras.activations.sigmoid)) 
 </sxh> </sxh>
  
Línea 709: Línea 710:
  
 <sxh python> <sxh python>
-model.add(Dense(3, input_dim=1,activation=tf.keras.activations.tanh)) +model.add(Dense(3, activation="tanh")) 
-model.add(Dense(3, input_dim=1,activation="tanh"))+model.add(Dense(3, activation=tf.keras.activations.tanh)) 
 </sxh> </sxh>
  
Línea 753: Línea 755:
  
 <sxh python> <sxh python>
-model.add(Dense(3, input_dim=1,activation=tf.keras.activations.relu)) +model.add(Dense(3, activation="relu")) 
-model.add(Dense(3, input_dim=1,activation="relu")) +model.add(Dense(3, activation=tf.keras.activations.relu)) 
-model.add(Dense(3, input_dim=1,activation=tf.keras.layers.ReLU()))+model.add(Dense(3, activation=tf.keras.layers.ReLU()))
 </sxh> </sxh>
  
Línea 761: Línea 763:
  
 <sxh python> <sxh python>
-model.add(Dense(3, input_dim=1,activation=tf.keras.layers.LeakyReLU())) +model.add(Dense(3, activation="LeakyReLU")) 
-model.add(Dense(3, input_dim=1,activation=tf.keras.layers.LeakyReLU(alpha=0.2)))+model.add(Dense(3, activation=tf.keras.layers.LeakyReLU())) 
 +model.add(Dense(3, activation=tf.keras.layers.LeakyReLU(alpha=0.2)))
 </sxh> </sxh>
  
Línea 806: Línea 809:
  
 <sxh python> <sxh python>
-model.add(Dense(3, input_dim=1,activation=tf.keras.activations.elu)) +model.add(Dense(3, activation="elu")) 
-model.add(Dense(3, input_dim=1,activation="elu")) +model.add(Dense(3, activation=tf.keras.activations.elu)) 
-model.add(Dense(3, input_dim=1,activation=tf.keras.layers.ELU(alpha=0.2)))+model.add(Dense(3, activation=tf.keras.layers.ELU(alpha=0.2)))
 </sxh> </sxh>
  
Línea 814: Línea 817:
  
 <sxh python> <sxh python>
-model.add(Dense(3, input_dim=1,activation=tf.keras.activations.selu,kernel_initializer="lecun_normal")) +model.add(Dense(3, activation="selu")) 
-model.add(Dense(3, input_dim=1,activation="selu",kernel_initializer="lecun_normal"))+model.add(Dense(3, activation=tf.keras.activations.selu))
 </sxh> </sxh>
  
Línea 844: Línea 847:
   * Deberíamos empezar siempre probando con ''ReLU'' y ''Leaky ReLU'' ya que son las más rápidas y en general funcionan bien.   * Deberíamos empezar siempre probando con ''ReLU'' y ''Leaky ReLU'' ya que son las más rápidas y en general funcionan bien.
   * Si ''ReLU'' y ''Leaky ReLU'' no dan un resultado lo suficientemente bueno, probar con ''SELU'' o ''ELU''   * Si ''ReLU'' y ''Leaky ReLU'' no dan un resultado lo suficientemente bueno, probar con ''SELU'' o ''ELU''
-  * El último lugar probar con ''GELU''+  * El último lugar probar con ''swish''
   * Nunca deberíamos usar ni ''Sigmoide'' ni ''Tanh'' a menos que no nos quede mas remedio   * Nunca deberíamos usar ni ''Sigmoide'' ni ''Tanh'' a menos que no nos quede mas remedio
  
Línea 872: Línea 875:
  
 {{ :clase:iabd:pia:1eval:funciones_activacion_tipo_lineal.png?direct |}} {{ :clase:iabd:pia:1eval:funciones_activacion_tipo_lineal.png?direct |}}
 +
 +$$lineal(x)=x$$
  
 La forma de usarla en keras es simplemente no diciendo nada sobre la función de activación en la capa de salida. La forma de usarla en keras es simplemente no diciendo nada sobre la función de activación en la capa de salida.
Línea 890: Línea 895:
 ==== Sigmoide ==== ==== Sigmoide ====
 Ya hemos visto la función de activación sigmoide  Ya hemos visto la función de activación sigmoide 
 +
 +
 +
 +{{ :clase:iabd:pia:1eval:funciones_activacion_sigmoide.png?direct |}}
 +
 +$$sigmoide(x)=\frac{1}{1+e^{-x}}$$
 +
  
 La función Sigmoide se usa en problemas de clasificación, cuando la salida es una probabilidad entre 0 y 1. Ejemplos de ello: La función Sigmoide se usa en problemas de clasificación, cuando la salida es una probabilidad entre 0 y 1. Ejemplos de ello:
Línea 898: Línea 910:
   * La probabilidad de que haya que comprar mañana acciones de la empresa Y.   * La probabilidad de que haya que comprar mañana acciones de la empresa Y.
   * La probabilidad de que haya que comprar mañana acciones de la empresa Z.   * La probabilidad de que haya que comprar mañana acciones de la empresa Z.
 +
 +Es decir se puede usar para clasificar entre 2 opciones pero también se puede usar cuando son más de dos opciones pero que no sean excluyentes entre ellas.
  
 <note tip> <note tip>
Línea 918: Línea 932:
  
 En vez de aplicarse a una única neurona se aplica a todas las neuronas de una capa. Es similar a la sigmoide pero lo que hace es que la probabilidad de todas las salidas de la capa debe sumar 1. En vez de aplicarse a una única neurona se aplica a todas las neuronas de una capa. Es similar a la sigmoide pero lo que hace es que la probabilidad de todas las salidas de la capa debe sumar 1.
 +
 +$$
 +softmax(x_i)=\frac{e^{x_i}}{\sum\limits_{j=0}^{n}e^{x_j}}
 +$$
 +
 +Siendo $x_i$ la entrada la la neurona //i-esioma// y siendo $x_j$ todas las entradas a todas las neuronas de la capa habiendo $n$ neuronas en la capa. Por lo que $x_i$ corresponde con uno de los valores de $x_j$
  
 Ejemplos de ello: Ejemplos de ello:
Línea 945: Línea 965:
  
 <sxh python> <sxh python>
 +from sklearn.preprocessing import LabelBinarizer
 +
 y=iris.target y=iris.target
 label_binarizer = LabelBinarizer() label_binarizer = LabelBinarizer()
Línea 971: Línea 993:
  
  
 +
 +===== Guardando modelos a disco =====
 +Una vez tenemos la red neuronal entrenada, la podemos guardar a disco para poder usarla en otro programa.
 +
 +
 +  * Para guardar la red
 +<sxh python>
 +
 +model=Sequential()
 +model.add(Dense(10, activation="sigmoid",input_dim=2))
 +model.compile(loss="mse")
 +history=model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=10,verbose=False)
 +
 +
 +model.save('my_red_neuronal.keras'
 +</sxh>
 +
 +  * Para cargar la red en otro programa
 +
 +<sxh python>
 +model=tf.keras.models.load_model('my_red_neuronal.keras')
 +
 +</sxh>
 +
 +  * Si el modelo al crearse usó funciones personalizadas, se debe usar el parámetro ''custom_objects''. Por ejemplo si se usó la función ''specificity'' se debe cargar:
 +<sxh python>
 +model=tf.keras.models.load_model('my_red_neuronal.keras',custom_objects={"specificity": specificity})
 +</sxh>
  
  
 +Más información:
 +  * [[https://www.tensorflow.org/api_docs/python/tf/keras/saving/save_model|tf.keras.saving.save_model]]
  
 ===== Redes Neuronales Famosas ===== ===== Redes Neuronales Famosas =====
Línea 1005: Línea 1057:
   * [[https://deepmind.com/|DeepMind]] de Google   * [[https://deepmind.com/|DeepMind]] de Google
   * [[https://ai.facebook.com/|FAIR]] de Facebook   * [[https://ai.facebook.com/|FAIR]] de Facebook
 +
 +
 +ChatGPT forma parte de la familia de modelos basados en GPT-3 pero especializado en conversaciones como se puede ver en la siguiente imagen:
 +
 +{{ :clase:iabd:pia:1eval:chat_gpt_familias_gpt_3.png?700 |}}
 +
 +Además ChatGPT no es de los modelos con más parámetros como podemos ver a continuación:
 +
 +{{ :clase:iabd:pia:1eval:chat_gpt_otros_modelos_lenguaje.png?600 |}}
 +
 +Por último vemos el tamaño que tendrá GPT4:
 +
 +{{ :clase:iabd:pia:1eval:chat_gpt-4.png?300 |}}
  
  
Línea 1015: Línea 1080:
     * [[https://www.nvidia.com/es-es/data-center/dgx-a100/|DGX A100 : Universal System for AI Infrastructure | NVIDIA]]     * [[https://www.nvidia.com/es-es/data-center/dgx-a100/|DGX A100 : Universal System for AI Infrastructure | NVIDIA]]
     * {{ :clase:iabd:pia:nvidia-dgx-station-a100-datasheet.pdf |NVIDIA DGX Station A100 datasheet}}     * {{ :clase:iabd:pia:nvidia-dgx-station-a100-datasheet.pdf |NVIDIA DGX Station A100 datasheet}}
-  * +  * ChatGPT  
 +    * [[https://addepto.com/blog/gpt-3-vs-chat-gpt-the-key-differences/|GPT-3 vs. ChatGPT. The Key Differences]] 
 +    * [[https://lifearchitect.ai/chatgpt/|GPT-3.5 + ChatGPT: An illustrated overview]] 
 +    * [[https://chatx.ai/blog/chatgpt/understanding-the-chatgpt-parameters-for-generating-human-like-text/|Understanding the Chatgpt Parameters for Generating Human-Like Text]] 
 +    * [[https://indianexpress.com/article/technology/tech-news-technology/chatgpt-4-release-features-specifications-parameters-8344149/|Open AI’s GPT 4 could support up to 1 trillion parameters, will be bigger than ChatGPT 3]]
  
  
Línea 1184: Línea 1253:
  
 Indica además que inicializador usarías con ella Indica además que inicializador usarías con ella
 +
  
 ==== Ejercicio 5.F ==== ==== Ejercicio 5.F ====
-Con los datos de las flores y la configuración de neuronas ''[2,4,8,4,1]'' crea una red neuronal cuyas capas ocultas: +Con los datos de las flores y la configuración de neuronas ''[2,4,8,4,2,1]'' crea una red neuronal cuyas capas ocultas:
-  * Usen la función de activación **Swish** indicando la función de activación como un ''string'' +
-  * Usen la función de activación **Swish** indicando la función de activación como una ''función de python''  +
- +
- +
- +
-Indica además que inicializador usarías con ella +
- +
-==== Ejercicio 5.G ==== +
-Con los datos de las flores y la configuración de neuronas ''[2,4,8,16,32,64,128,128,64,32,16,4,2,1]'' crea una red neuronal cuyas capas ocultas:+
   * Usen la función de activación **tangente hiperbólica** indicando la función de activación como un ''string''   * Usen la función de activación **tangente hiperbólica** indicando la función de activación como un ''string''
-  * Usen la función de activación **tangente hiperbólica** indicando la función de activación como una ''función de python'' 
-  * Usen la función de activación **ReLU** indicando la función de activación como un ''string'' 
   * Usen la función de activación **ReLU** indicando la función de activación como una ''función de python''   * Usen la función de activación **ReLU** indicando la función de activación como una ''función de python''
-  * Usen la función de activación **ReLU** indicando la función de activación como una ''clase de python'' +  * Usen la función de activación **LeakyReLU con un valor de α=0.35** indicando la función de activación como una ''clase de python''
-  * Usen la función de activación **LeakyReLU** indicando la función de activación como una ''clase de python'' +
-  * Usen la función de activación **LeakyReLU con un valor de α=0.03** indicando la función de activación como una ''clase de python''+
   * Usen la función de activación **SELU** indicando la función de activación como un ''string''   * Usen la función de activación **SELU** indicando la función de activación como un ''string''
-  * Usen la función de activación **SELU** indicando la función de activación como una ''función de python''  +  * Usen la función de activación **ELU con un valor de α=0.25**  
-  * Usen la función de activación **ELU con un valor de α=0.2**   +
-  * Usen la función de activación **Swish** indicando la función de activación como un ''string'' +
-  * Usen la función de activación **Swish** indicando la función de activación como una ''función de python''  +
- +
  
 Indica además que inicializador usarías con ella Indica además que inicializador usarías con ella
Línea 1217: Línea 1269:
 Con los datos del cáncer de mama crea una red neuronal de forma que Con los datos del cáncer de mama crea una red neuronal de forma que
  
-  * Tenga capas ocultas y la capa central tenga 20 neuronas (antes y después habrá menos neuronas) +  * Tenga las siguientes capas ''[2,5,10,15,20,15,10,5,2,1]'' 
-  * Se entrenará durante 10 épocas +  * Se entrenará durante 100 épocas 
-  * En las capas ocultas se usará la función de activación ReLU +  * En las capas ocultas se usará la función de activación "SeLU" 
-  * Obtén el valor de ''loss'' de la última capa comparando si usas +  * Haz 3 gráficas con la función de pérdida comparando los inicializadores: 
-    * ''lecum normal''+    * ''lecun_normal''
     * ''he_normal''     * ''he_normal''
 +    * ''glorot_normal''
  
 ¿Que dice la teoría de cual se debería haber usado? ¿Ha habido alguna diferencia? ¿Que dice la teoría de cual se debería haber usado? ¿Ha habido alguna diferencia?
  
 ==== Ejercicio 6.B ==== ==== Ejercicio 6.B ====
-Con los datos del cáncer de mama crea una red neuronal de forma que:+Repita el ejercicio anterior pero ahora con las siguientes capas:
  
-  * Tenga 30 capas ocultas y la capa central tenga 40 neuronas (antes y después habrá menos neuronas) +''[5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5,1]''
-  * Se entrenará durante 10 épocas +
-  * En las capas ocultas se usará la función de activación ReLU +
-  * Obtén el valor de ''loss'' de la última capa comparando si usas +
-    * ''lecum normal'' +
-    * ''he_normal''+
  
 ¿Que dice la teoría de cual se debería haber usado? ¿Ha habido alguna diferencia? ¿Que dice la teoría de cual se debería haber usado? ¿Ha habido alguna diferencia?
  
 ==== Ejercicio 7 ==== ==== Ejercicio 7 ====
-Con los datos del cáncer de mama crea una red neuronal variando cada vez la función de activación+Con los datos del cáncer de mama crea una red neuronal con las siguientes capas ''[16,32,64,127,64,32,16,8,1]'' variando cada vez la función de activación y mostrando una gráfica con su función de perdida. el nº de épocas será de 100. Y se usará el inicializador ''glorot_uniform''
  
   * sigmoid   * sigmoid
Línea 1247: Línea 1295:
   * ELU   * ELU
   * SELU   * SELU
-  * GELU 
-  * Swish 
  
-Deberás mostrar un subplot con el ''loss'' en cada época para cada función de activación en una configuración de 3x3. Puedes usar el método ''plot_metrics'' que creaste en el último ejercicio del tema anterior.+Responde:
  
-  * ¿Cuales convergen antes? 
   * ¿Cuales son las que dan un mejor resultado?   * ¿Cuales son las que dan un mejor resultado?
  
Línea 1274: Línea 1319:
   * La función de activación que usarías en la última capa   * La función de activación que usarías en la última capa
   * El Nº de neuronas de la última capa   * El Nº de neuronas de la última capa
-  * Crea dicha última capa en Keras 
  
 ==== Ejercicio 9.A ==== ==== Ejercicio 9.A ====
-Usando las funciones de activación que proporciona Keras, haz la siguiente gráfica:+Crea y entrena una red neuronal con los datos de las flores pero ahora ya deberás tener en cuenta los 3 tipos de flor.
  
-{{ :clase:iabd:pia:1eval:funciones_activacion_sigmoide.png?direct&400 |}}+Deberás: 
 +  * Probar con varias funciones de activación en las capas ocultas para ver cual es la mejor. 
 +  * Elegir adecuadamente la función de activación de la capa de salida 
 +  * ¿Cuantas neuronas tiene la última capa?
  
 ==== Ejercicio 9.B ==== ==== Ejercicio 9.B ====
-Usando las funciones de activación que proporciona Keras, haz la siguiente gráfica:+Crea y entrena una red neuronal que averigüe el tipo de un vino. Los datos los obtendrás con la función ''load_wine''.
  
-{{ :clase:iabd:pia:1eval:funciones_activacion.png?direct&900 |}} 
- 
-==== Ejercicio 10.A ==== 
-Crea y entrena una red neuronal que averigüe si un paciente tendrá diabetes. Los datos los obtendrás con la función ''load_diabetes''. 
  
 <sxh python> <sxh python>
-from sklearn.datasets import load_diabetes+from sklearn.datasets import load_wine
 </sxh> </sxh>
  
Línea 1296: Línea 1339:
   * Probar con varias funciones de activación en las capas ocultas para ver cual es la mejor.   * Probar con varias funciones de activación en las capas ocultas para ver cual es la mejor.
   * Elegir adecuadamente la función de activación de la capa de salida   * Elegir adecuadamente la función de activación de la capa de salida
 +  * ¿Cuantas neuronas tiene la última capa?
  
-==== Ejercicio 10.====+==== Ejercicio 9.====
 Crea y entrena una red neuronal que averigüe el dígito que ha escrito una persona. Los datos los obtendrás con la función ''load_digits''. Crea y entrena una red neuronal que averigüe el dígito que ha escrito una persona. Los datos los obtendrás con la función ''load_digits''.
  
Línea 1308: Línea 1352:
   * Probar con varias funciones de activación en las capas ocultas para ver cual es la mejor.   * Probar con varias funciones de activación en las capas ocultas para ver cual es la mejor.
   * Elegir adecuadamente la función de activación de la capa de salida   * Elegir adecuadamente la función de activación de la capa de salida
 +  * ¿Cuantas neuronas tiene la última capa?
  
-==== Ejercicio 10.C ==== 
-Crea y entrena una red neuronal que averigüe el tipo de un vino. Los datos los obtendrás con la función ''load_wine''. 
  
 +
 +==== Ejercicio 9.D ====
 +Crea y entrena una red neuronal que averigüe la "cantidad" (es un número) de diabetes que tendrá un paciente. Los datos los obtendrás con la función ''load_diabetes''.
  
 <sxh python> <sxh python>
-from sklearn.datasets import load_wine+from sklearn.datasets import load_diabetes
 </sxh> </sxh>
  
Línea 1320: Línea 1366:
   * Probar con varias funciones de activación en las capas ocultas para ver cual es la mejor.   * Probar con varias funciones de activación en las capas ocultas para ver cual es la mejor.
   * Elegir adecuadamente la función de activación de la capa de salida   * Elegir adecuadamente la función de activación de la capa de salida
 +  * ¿Has conseguido que haya un error bajo?
  
-==== Ejercicio 10.D ==== 
-Crea y entrena una red neuronal que averigüe si una transacción es fraudulenta. Los datos los obtendrás de [[https://www.kaggle.com/mlg-ulb/creditcardfraud|Credit Card Fraud Detection Dataset]] 
  
-Deberás: 
-  * Probar con varias funciones de activación en las capas ocultas para ver cual es la mejor. 
-  * Elegir adecuadamente la función de activación de la capa de salida 
  
  
-==== Ejercicio 10.E ==== +==== Ejercicio 10 ==== 
-Crea y entrena una red neuronal con los datos de las flores pero ahora ya deberás tener en cuenta los 3 tipos de flor.+Crea y entrena una red neuronal que averigüe el tipo de vino. Los datos los obtendrás con la función ''load_wine''. 
 + 
 +<sxh python> 
 +from sklearn.datasets import load_wine 
 +</sxh>
  
 Deberás: Deberás:
   * Probar con varias funciones de activación en las capas ocultas para ver cual es la mejor.   * Probar con varias funciones de activación en las capas ocultas para ver cual es la mejor.
   * Elegir adecuadamente la función de activación de la capa de salida   * Elegir adecuadamente la función de activación de la capa de salida
 +  * Deberás también probar para cada una de las funciones de activación las siguientes estructuras de red:
  
-==== Ejercicio 10.F ==== +^  Nº Neuronas en cada capa  ^ 
-Crea y entrena una red neuronal con los datos de las flores pero ahora ya deberás tener en cuenta los tipos de flor. +|  2,4, | 
- +|  4,8,3  | 
-Deberás: +|  8,16,8, | 
-  * Probar con varias funciones de activación en las capas ocultas para ver cual es la mejor. La diferencia con el anterior ejercicio es que no vas a probar en todas las capas ocultas con la misma capa de activación. Sino que cda red tendrá mezcladas distintas funciones de activación. + 4,8,4, | 
-  * Elegir adecuadamente la función de activación de la capa de salida+ 8,16,8,
 +|  16,32,16,8,
 +|  32,64,32,8,
 +|  64,128,64,8,
 +|  8,16,32,64,32,16,8,
  
 +  * La colocación de las distintas gráficas serán la siguiente:
 +    * En cada columna estarán las gráficas de cada función de activación
 +    * En cada fila estarán las gráficas de cada arquitectura de red
clase/iabd/pia/1eval/tema06.1648622870.txt.gz · Última modificación: 2022/03/30 08:47 por admin