IIC2613-Inteligencia-Artificial-2023-1 / Syllabus

Repositorio base del curso, donde se publicarán enunciados, ayudantías y se resolverán dudas.
39 stars 1 forks source link

Tarea 4: Implementación de Red Neuronal #87

Open mwoolvett opened 1 year ago

mwoolvett commented 1 year ago

Hola!

Al crear un modelo y guardarlo correctamente, cuando corro el "test.py" me tira error en la línea de "self.model = tf.keras.models.load_model(os.path.join(CURRENT_PATH, "data", model_name))". El error es "UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 38: invalid continuation byte". Supongo que tiene que ver con la codificación y decodificación del archivo, pero no quise meter más mano, ya que no hay que modificar más de lo que piden. Las rutas de donde saca el modelo son correctas. No se si tendré un problema mayor o si a alguien más le pasa lo mismo.

De antemano muchas gracias!

benitopalaciosm commented 1 year ago

A mí también me pasa lo mismo y no sé cómo arreglarlo

dfloreaa commented 1 year ago

Hola, comentame si esto te funciona.

Al guardar el archivo utiliza: model.save(os.path.join('agents', 'data', 'NNMouse.h5'), save_format='h5')

Al leer el modelo, cambia la línea por: self.model = tf.keras.models.load_model(os.path.join(CURRENT_PATH, "data", model_name), compile=True)

En principio debería funcionar ahora. En caso contrario, coméntame qué obtienes al correr print(os.path.join('agents', 'data', 'NNMouse.h5')) desde el notebook de entrenamiento del agente

y print(os.path.join(CURRENT_PATH, "data", model_name)) desde el archivo neural.py.

benitopalaciosm commented 1 year ago

Hola, a mí sigue sin funcionarme.

Al correr print(os.path.join('agents', 'data', 'NNMouse.h5')) desde el notebook obtengo: agents\data\NNMouse.h5

Al correr print(os.path.join(CURRENT_PATH, "data", model_name)) desde neural.py obtengo: C:\Users\benit\Documents\Ingeniería UC\VII Semestre\Inteligencia Artificial\tarea-4-2023-1-benitopalaciosm\agents\data\NNCat.h5

Las rutas se ven bien, quizás tengo algún problema definiendo el modelo, pero no me lanza ningún error y no sé cómo ir debuggeandolo para descubrirlo.

mwoolvett commented 1 year ago

Lo mismo, las rutas parecen estar correctas, pero sigue sin funcionar.

dfloreaa commented 1 year ago

Hola, el problema parece ser en que el path de carga tiene una tilde (o caracteres no decodeables por utf-8). Prueben añadiendo las siguientes líneas al comienzo del código:

import sys
sys.setdefaultencoding('latin1')

Tensorflow usa por defecto UTF-8 para desencodear strings, quizás esto lo arregle.

En caso contario, un pantallazo de todo el mensaje de error en la consola (todo el backlog) sería muy útil.

Un saludo :)

dfloreaa commented 1 year ago

Lo otro es que simplemente utilicen el path local del archivo, cambien os.path.join(CURRENT_PATH, "data", model_name) por el path del modelo desde la carpeta que tengan abierta (probablemente os.path.join("data", model_name)).

En principio no debería arrojarles errores de este modo.

amondinellir commented 1 year ago

Hola. Tengo el mismo problema con el encoding, pero el método setdefaultencoding no existe. Además, tengo otra pregunta. Para cuando entrenamos el modelo, ¿debemos separar en set de entrenamiento y testeo o se puede entrenar con todos los datos?

dfloreaa commented 1 year ago

@amondinellir Aparentemente, setdefaultencoding no funciona para Python 3 en adelante, te recomiendo utilizar el path local en vez del global al cargar (mi segundo comentario).

Por otro lado, efectivamente no debes separar el set en entrenamiento/testeo, como sí lo has hecho para tareas pasadas (y se suele hacer en prácticamente todas las tareas de aprendizaje que buscan generalizar). Esto se debe a que particularmente para esta tarea buscamos hacer overfitting (sobreajuste) sobre todos los datos ¿a qué se debe esto?

Reflexiona sobre con qué datos estamos entrenando, ¿deseamos generalizar a datos desconocidos dentro de la tarea?

Un saludo y éxito con tu tarea 😊

amondinellir commented 1 year ago

He intetado todo lo de esta issue sobre encoding y nada me funciona.

amondinellir commented 1 year ago

El error que me da es OSError: No file or directory found at data\NNCat.h5

La carpeta data está dentro de agents.

dfloreaa commented 1 year ago

@amondinellir prueba con agents/data/NNCat.h5 en su lugar

amondinellir commented 1 year ago

Me da el siguiente error:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 40: invalid continuation byte

dfloreaa commented 1 year ago

¿Me podrías enviar el error completo? Alguno de los caracteres en el path desde donde lees el archivo no es legible utilizando urf-8

amondinellir commented 1 year ago

Traceback (most recent call last): File "c:/Users/amtat/OneDrive - uc.cl/UC/Año 6/Sem 1/Inteligencia Artificial/tarea-4-2023-1-amondinellir/test.py", line 21, in cat = NNCat(game.cat_pos, "NNCat.h5") # Reemplazar con el nombre del archivo de la red neuronal File "c:\Users\amtat\OneDrive - uc.cl\UC\Año 6\Sem 1\Inteligencia Artificial\tarea-4-2023-1-amondinellir\agents\neural.py", line 21, in init self.model = tf.keras.models.load_model(os.path.join("agents", "data", model_name)) File "C:\Users\amtat\AppData\Roaming\Python\Python38\site-packages\keras\saving\saving_api.py", line 212, in load_model return legacy_sm_saving_lib.load_model( File "C:\Users\amtat\AppData\Roaming\Python\Python38\site-packages\keras\utils\traceback_utils.py", line 70, in error_handler raise e.with_traceback(filtered_tb) from None File "C:\Users\amtat\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\lib\io\file_io.py", line 703, in is_directory_v2 return _pywrap_file_io.IsDirectory(compat.path_to_bytes(path)) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 40: invalid continuation byte

dfloreaa commented 1 year ago

Según esta issue el error suele surgir cuando el archivo referenciado no existe. Estás seguro de tener el archivo en agents/data/NNCat.h5? Nombre del archivo y carpeta

amondinellir commented 1 year ago

Así es, está dentro de agents/data, y estoy cargando el archivo con tf.keras.models.load_model(os.path.join("agents", "data", model_name)), que también lo intente con compile=True

dfloreaa commented 1 year ago

Sube los archivos a tu repositorio por favor, le echaré un ojo

amondinellir commented 1 year ago

Ok

amondinellir commented 1 year ago

ya lo subí

dfloreaa commented 1 year ago

@amondinellir utilizando tu código y la línea

self.model = tf.keras.models.load_model(os.path.join(CURRENT_PATH, "data", model_name), compile = False)

Me cargó el modelo sin problemas, te recomendaría reinstalar tensorflow y si no, imprimir el path desde el que cargas y compartirlo por aquí (el path completo).

amondinellir commented 1 year ago

Este es path desde el que cargo:

C:\Users\amtat\OneDrive - uc.cl\UC\Año 6\Sem 1\Inteligencia Artificial\tarea-4-2023-1-amondinellir\agents\data\NNCat.h5

benitopalaciosm commented 1 year ago

@amondinellir intenta con cambiarle el nombre a tu carpeta que dice "Año". A mí me empezó a funcionar cuando le eliminé las tildes a los nombres de mis carpetas

dfloreaa commented 1 year ago

Efectivamente, utf-8 no puede desencodear la ñ, es debido a eso

amondinellir commented 1 year ago

Ya funcionó. Muchas gracias!!

rodrigoogalde commented 1 year ago

Como puedo saber cuales son los caracteres no permitidos? Tengo el mismo problema, pero no tengo ninguna "ñ" Esta es mi ruta: C:\Users\Rodrigo\OneDrive - Universidad Católica de Chile\PUC\7°Semestre\IA\Tarea-4>

dfloreaa commented 1 year ago

@rodrigoogalde probablemente sea el "°" o la "ó", me la jugaría más por la "ó" dado que no existe en el alfabeto inglés.