UC-IIC2613 / Syllabus

27 stars 10 forks source link

[Tarea 4] [P3] Duda sobre el mae en el set de validación y testing #210

Open gicrot opened 3 years ago

gicrot commented 3 years ago

Hola,

Estoy entrenando mis modelos usando Keras, y me surge un gran problema porque actualmente estoy entrenando mi modelo según los métodos que nos dan y en las últimas epoch del entrenamiento obtengo mae en validación menor a 200 incluso, pero al momento de probar en el set de testing el mae me da 6000 con el método evaluate.

Entonces quería preguntar que puedo estar haciendo mal con esto, quizás el mae de validación no es el de la última epoch o quizás estoy haciendo mal el evaluate o quizás es otra cosa pero estoy pegado acá :(

IngElecPuc commented 3 years ago

Hola Lo más probable es que estés haciendo overfitting, en especial por sobreentrenamiento de la red. No sé con cuántas épocas estarás trabajando, pero mi consejo es el siguiente. Revisa el gráfico de la evolución por cada época de tu entrenamiento. Compara las curvas que te dan tanto con el set de entrenamiento como con el de validación. Ambas deberían partir con un valor muy alto de mae, mientras vayan bajando ambas, todo bien. En el punto en que se note que el mae de validación ya no va bajando con el de entrenamiento debes dejar de entrenar. Tal vez no tengas un mae tan bueno, como decías, pero ese valor no sirve tenerlo bajo si solo se cumple para el set de entrenamiento. Cuando hayas encontrado un punto de corte del entrenamiento puedes guardar tu modelo utilizando early stop, o bien anotando la época en la que eso sucede y dejando ese valor como máximo punto de entrenamiento. Saludos

gicrot commented 3 years ago

Claro, entiendo eso, de hecho antes usaba 15 epoch y ahora lo he estado bajando a 5 y me sigue pasando lo mismo (de hecho me aumentó el mae a 7000 con el nuevo mejor modelo). También estaba leyendo otras issues y los modelos los dejo con la última capa con la función de activación igual a la de las otras capas de ese modelo. Pensaba que quizás podría ser el optimizer del modelo y cambiarlo, o quizás deba aumentar el validación split, pero no se si es legal hacerlo en esta tarea.

IngElecPuc commented 3 years ago

Si tu set de validación es muy pequeño puede no ser representativo estadísticamente y arrojar mucho ruido, pero si está bien definido es difícil que te esté generando un problema. De todas maneras, estás atascado en un punto típico del aprendizaje automático, buscando hiperparámetros. En ese caso, en vez de hacer uno por uno cada entrenamiento, lo que te recomiendo es que te des algunos rangos de hiperparámetros críticos, y construyas tablas, como en la tarea anterior. Con los métodos de gradientes uno de los hiperparámetros más crítico es el ratio de aprendizaje, luego de eso puedes intentar averiguar si tu arquitectura (número de capas, y funciones de activación) están bien. En una de esas tu modelo es muy grande y el sobreajuste lo estás generando por tener muchos parámetros y pocos datos. Tienes que continuar en esta búsqueda. Saludos

matiasmsm commented 3 years ago

Hola no entiendo. muy bien si se debe utilizar mlp.fit para el validation set o el metodo evaulate y usar el MAE de ese metodo. Es que cuando utilizo el MAE de evaluate me da muy grande pero en fit todo bien. Saludos

IngElecPuc commented 3 years ago

Hola En el método mlp.fit, se va a calcular las métricas que pusiste en mlp.compile época a época, tanto para los sets de validación como entrenamiento. Puedes utilizar el valor de la última época de la historia en validación o utilizar mlp.evaluate en validación, ambos deben dar lo mismo. Si, por otra parte, ya estás probando en test, y te da una diferencia importante, es porque tu modelo no generaliza bien. Tienes que ver cómo van las curvas de entrenamiento y validación, y parar el entrenamiento antes (early stop, más arriba) si se están separando mucho. O bien ver si tu modelo tiene muchos parámetros (demasiadas neuronas, utiliza summary). Saludos