IIC2613 / Syllabus

Repositorio oficial Inteligencia Artificial 2020-2
7 stars 1 forks source link

T4 - poses humanas: accuracy_score poco consistente y categorical_crossentropy en vez de binary_crossentropy #115

Open jmwielandt opened 3 years ago

jmwielandt commented 3 years ago

Hola, acabo de encontrar una cierta combinación de capas, nodos y funciones de pérdida que usando categorical_crossentropy en lugar de binary_crossentropy (que según leí es sólo para cuando tenemos dos clases, pero en nuestro caso tenemos 4) he conseguido unos pocos modelos que llegan al 67%, pero también me salen otros mucho peores.

  1. ¿Está bien si me quedo con un modelo que me de un % alto y ya?
  2. No hay problema en usar categorical_crossentropy en lugar de binary_crossentropy para esa pregunta? Con esto he conseguido los mejores resultados del día, pero pregunto porque el enunciado dice que nos centraremos en el binary.

Gracias!

IngElecPuc commented 3 years ago

Hola Voy a responder primero a las dudas que me planteas como más relevantes y luego te doy un por más de explicación.

  1. El enunciado te dice que debes superar 60% para considerar el problema correcto. Si logras algo sobre 60% pasa a contestar las preguntas pues es lo único que te podría bajar el puntaje a partir de ahí. 2 No, no lo hay. Con el aprendizaje inductivo no tienes un único camino a la gloria, sino mejores o peores caminos. Yo logré 71% en una primera instancia, y luego lo pude aumentar a 83% con binary_crossentropy. Toma en cuenta que si bien es cierto que la entropía binaria se utilizaría para dos clases, cuando se estudia el problema de dos clases se hace con una única clase: pertenece o no a la clase. Esto hace mucha diferencia si tú entrenas cada neurona bajo el supuesto de si los datos pertenecen o no a su clase objetivo. Si repites ese proceso para las cuatro neuronas puedes tener un clasificador que te está diciendo, para cada neurona, si pertenece o no a esa clase. Entonces, en principio es posible. El tema de rigor, es que la categorical_crossentropy está desarrollada para que la neurona de la clase respectiva se active con mayor probabilidad, por lo que es más adecuado desde el punto teórico. Esto que está sucediendo que se obtiene un resultado más alto con binary_crossentropy es una curiosidad matemática, algo que no estamos seguros de por qué sucede, pero si revisas un poco internet, ha pasado en otros casos. Saludos Felipe R.
jitorcas commented 3 years ago

Hola @IngElecPuc!

Tengo dos dudas relacionadas con esto.

Me pasa que tengo un modelo que me da máximo accuracy de 74% en el set de test, pero es muy inestable, ya que si corro de nuevo el modelo con las mismas caracteristicas me puede llegar hasta 50% en el peor de los casos. Mi pregunta es ¿Podría continuar trabajando con un modelo que me de 74% a pesar que no sea siempre así, o debo trabajar con un modelo más estable? Por otro lado, entiendo que en la ayudantía dijiste que dependiendo del optimizer que utilices los resultados obtenidos nos darán con más o menos ruido. Me sucede que mi modelo no aumenta el accuracy a medida aumenta los epochs, si no que varía mucho como en la siguiente imagen.

Captura de Pantalla 2020-12-04 a la(s) 17 50 39

Estoy utilizando desde 80 a 100 épocas. y obtengo un accuracy de 73,45% en el set de test.

Tenía la duda de que quizá no le estoy pasando bien el _inputshape a la primera capa del modelo. El array X que me queda luego de continuar el procesamiento de datos que nos pasaste es de la forma (436, 1, 51) y el _inputshape que fijo es (1, 51) ¿Estoy cometiendo un error?

Muchas gracias!

IngElecPuc commented 3 years ago

Hola

Tal vez haya un pequeño y sutil error. Trata de hacer un reshape a la matriz de (436, 1, 51) para que tenga forma (436, 51). Así, deberías poner un input shape de (51, ) y no de (1, 51). Lo que creo que te está pasando es que keras te está tomando toda la matriz como un único bash pues encuentra que en la segunda dimensión de la matriz solo hay un elemento. Puede que me equivoque pero creo que es así. Si eso es lo que te está sucediendo entonces haces la propagación del gradiente una única vez sobre todo el set de datos, y eso puede ser ruidoso. Lo que queremos es que el gradiente siga un camino hacia el óptimo, no que se pase de largo, por así decirlo. Trata y ve qué sucede.

julioag commented 3 years ago

Hola, yo estoy teniendo el mismo problema pero no puedo avanzar del 34% , hice el reshape de la matriz y he probado varias combinaciones de optimizer, cantidad de neuronas para las distintas capas y funciones de activación sin poder aumentar el accuracy. Donde cada epoch casi no presenta una mejoría de la inicial. Alguna idea de que puede ser el problema?