UC-IIC2613 / Syllabus

27 stars 10 forks source link

[Tarea 4][P3] Número de layers y variación de el input_shape #224

Open sgutgar opened 3 years ago

sgutgar commented 3 years ago

Hola, tengo entendido que con hacer un add al modelo que contenga input_shape o input_dim se obtiene el input layer y el primer hidden layer solo con este add (se puede ver acá), pero me piden variar las neuronas de estas dos layers, siendo que el input layer debe tener un tamaño fijo (características de el diamante). Entonces no entiendo como variar esto, quizás sacar alguna característica? Pero no me hace sentido ya que todas las características aportan, y en términos del tiempo no se demora nada hacer el fit. Creo que en la issue #217 se habla de esto, pero no se deja claro como variar las neuronas de la inputlayer, sino que la respuesta menciona la cantidad de ejemplos, siendo que esto no se relaciona con lo pedido, que es: "Proponga hasta 5 pares de neuronas para las capas inicial y oculta"_

joaquinhernandezg commented 3 years ago

Me sumo a la duda del compañero. Al tener un perceptrón sin capas ocultas, no hay nada que variar, pues el numero de inputs es igual al numero de features y el numero de outputs es 1. En el caso de tener una capa oculta, solo se pueden variar el numero de neuronas en esta capa, pero en el enunciado hablan de "pares de valores". Viendo el link que puso el compañero creo que estuve haciendo la pregunta 3 todo el rato con 2 capas ocultas en vez de 1 como se pide y ahora estoy medio confundido.

naviera commented 3 years ago

También tengo esta duda, en este ejemplo que es oficial de tensorflow, en la sección "Construye el modelo" se ve un modelo como el que se mostró en ayudantía (agrega 3 layers.Dense), y dice que tiene 2 capas ocultas.

chris-carstens commented 3 years ago

Hola! @sgutgar @joaquinhernandezg Como mencionaron, si bien el input_shape es fijo para la capa de entrada, el parámetro units con la cantidad de neuronas de la capa sí se puede variar, lo cual es lo que pide el enunciado para probar distintas combinaciones y analizar la conveniencia.

Lo otro @naviera entiendo que es tema de notación, pero en general, y en esta tarea, definimos la primera capa (con un input_shape fijo) como capa de entrada, y la última como de salida, por lo que el solo el resto entre medio serían ocultas.

naviera commented 3 years ago

muchas gracias por la respuesta!

sgutgar commented 3 years ago

Gracias por la respuesta @chris-carstens, pero tengo entendido que units es lo mismo que neuronas, por lo que sigo con la duda. El input layer se crea a partir de solamente el input_shape, por lo que no veo como puedo variar esta capa, ya que las neuronas dependen de algo invariable. Si existe algún metodo para crear un input_layer con cantidad de neuronas distintas a las caracteristicas de X, no he podido encontrarlo, agradecería alguuna recomendación, pues hasta ahora add(dense) solamente crea la input_layer a partir del shape invariable.

chris-carstens commented 3 years ago

@sgutgar Sí, units es el número de neuronas. Y ahora entiendo tu duda, sumado al ejemplo dado por @naviera . Efectivamente cuando hacemos

model.add(Dense(3, input_shape=(4,), activation = 'relu'))

es equivalente a realizar:

model.add(keras.Input(shape=(4,)))
model.add(Dense(3, activation='relu'))

Donde en ambos casos tendríamos una capa de input y una capa oculta. Por lo que entiendo, el enunciado asume la primera capa que menciona el mismo, como una capa oculta también, más allá de la capa con el input_shape fijo o de entrada, por lo que en la práctica tienes dos capas ocultas a las que variarle el número de neuronas. De hecho, en general en la misma documentación de keras no se menciona la capa de input o se "obvia". En otras palabras, lo que estás realizando @joaquinhernandezg sería lo esperado.

IngElecPuc commented 3 years ago

Hola En el enunciado nos estamos refiriendo a la cantidad de capas Densas o Lineales para agregar al modelo. El hecho de que no se cuenten en los diagramas la primera capa es porque los diagramas no muestran de manera fehaciente lo que sucede con la matemática. Las capas densas o lineales se trabajan con una transformación lineal con matrices, y la suma de un vector de sesgo, para luego pasar por una función de activación. Un perceptrón de una capa tiene la forma y = f(Ax + b). Si suponemos un problema de clasificación con un input x de tamaño m, e y un vector categórico de tamaño n, entonces los pesos tienen las siguientes formas: A de m x n, b m x 1. El diagrama de este perceptrón tiene dos capas, uno con m neuronas, y el otro con n. El problema de ese diagrama. que ignora la capa de entrada, es que la toma como algo virtual para simbolizar la entrada, en tal caso, ni siquiera existe, por eso se ignora. Si nos movemos al caso de dos capas, tendríamos y = f( Cf( Ax +b) +d), y aquí las matrices tendrían A de m x s, b de m x 1; C de s x n, d de s x 1. Aquí nos aparece la capa oculta, pero si vemos las transformaciones solo tenemos transformación de entrada y transformación de salida. Lo que sucede es que podemos definir un vector de transición h1 = f(Ax + b), e y = f(Ch1 + d), pero ojo, el vector oculto NO es una capa, es un mapa de activación. Ya en el diagrama vemos que nos aparece un vector oculto que a veces se confunde con una capa. Para leer bien el diagrama hay que ignorar la capa de entrada, que es una corrección que no necesitaría un diagrama representativo. Llegamos al caso de la tarea. En la tarea ustedes van a necesitar 3 capas para tener buenos resultados, y van a tener acceso a los dos hiperparámetros (s,r) en este ejemplo. La función compuesta de la red sería y = f( Ef( Cf( Ax +b) +d) +g), con pesos A de m x s, b de m x 1; C de s x r, d de s x 1; E de r x n, g de r x 1. Al utilizar variables de apoyo h1 = f(Ax + b), h2 = f(Ch1 + d), y = f(Eh2 +g). Entonces, el diagrama les va a aparecer con dos capas ocultas, pero nuevamente, son los mapas de activación. En todo caso, sea Keras o Pytorch, queremos que utilicen TRES instancias de clases, que nos llevan a TRES transformaciones (no voy a hablar de capa). Pues esta cantidad les asegura lo suficiente para desarrollar bien el problema. Yo mismo redacté el enunciado así que disculpen las ambigüedades, aunque tampoco estoy 100% de acuerdo con ese diagrama, pues tiende a confundir los conceptos. Saludos