El docente compartió 2 cuadernos y informes esta semana. No los subo: son suyos.
De qué iba
El proyecto pedía una LSTM de 128 unidades internas con una Dense softmax para predecir texto. Como el enunciado hablaba de caracteres mientras el cuaderno de la clase trabajaba por palabras, hice los dos modelos con la misma arquitectura y los comparé. Cambié el corpus de 60 filas del ejemplo por el Quijote descargado de Project Gutenberg y escribí un callback propio que, al terminar cada época, imprimía las métricas y generaba texto con cuatro temperaturas, así que el informe muestra cómo va mejorando la escritura época a época. El resultado más útil no fue el texto sino las curvas: el modelo de palabras siguió bajando la pérdida de entrenamiento mientras la de validación dejaba de mejorar en la época 9.
Sustituí el mini-corpus de clase por el Quijote de Project Gutenberg: 403.247 caracteres, 73.974 palabras y 12.479 formas distintas
Modelo por palabras: 30 épocas, 1.673.584 parámetros, pérdida de 6.4233 a 4.1717 y mínimo de val_loss de 5.5484 en la época 9
Modelo por caracteres: 28 épocas, 89.194 parámetros, vocabulario de 42 símbolos, pérdida de 2.5678 a 1.2034 y 0.4957 de accuracy en validación
Encontré que el mini-corpus de la clase tenía 60 filas pero solo 30 frases: la segunda mitad repetía la primera con la misma coletilla, y eso explicaba las cadenas repetitivas de la demostración
Lo que costó. El primer armado del dataset por palabras se me cayó por memoria: generar prefijos crecientes y codificar la etiqueta con one-hot no se sostiene cuando el vocabulario tiene miles de clases y hay decenas de miles de ejemplos. Lo resolví con etiquetas enteras y sparse_categorical_crossentropy, que da el mismo resultado matemático consumiendo órdenes de magnitud menos.
Qué pedían
El enunciado y la rúbrica, tal cual los publicaron.