Jazz Zaragoza

Este domingo terminó la edición de este año del festival de Jazz de Zaragoza y he tenido la suerte de haber podido disfrutar de tres conciertazos.

El miércoles 12 tocaba el Arturo Sandoval Sextet y acudimos esperando un concierto muy animado, con ese ritmo latino tan característico y el cubano no nos decepcionó. Sí que he de decir que tocó más canciones lentas de lo que esperaba, incluso más de un bolero, que no era lo que buscábamos, pero cuando quería ponerle marcha, se la daba, y disfruté bastante de su trompeta y el resto de la banda. Lo más destacable fue el solo de maracas a cargo del percusionista Philbert Armenteros. Nos dejó a todos anonadados con su arte con un instrumento que parece tan soso y monótono. Nunca hubiese podido imaginar que se podían sacar tantos sonidos de unas simples maracas.

Dos días más tarde fue el turno del James Carter Quintet, teloneados por el Zaragozano Luis Giménez Quartet. Simplemente puedo decir que estos últimos no estuvieron mal. Tocan un estilo de jazz que no me motiva nada (guitarra eléctrica muy melódica, piano, batería y bajo), muy sosegado, que se podría calificar como música de ambiente. Que también tendrá su mérito y su belleza, pero no me llama como música para escuchar. Además no era el día. El cabeza de cartel de esa noche era James Carter, un artista del saxo y el clarinete, con un grupo que prometía hacer vibrar la sala: y lo hizo. Ya con el primer tema, uno de esos temas largos de jazz, con solos de todos los músicos, algunos repetidos, ya obtuvieron más aplausos que toda la interpretación del grupo anterior. James Carter exprimió sus instrumentos al máximo, y nos deleitaron con un repertorio de canciones de las que el cuerpo te pide levantarte, que es exactamente como a mí me gusta el jazz.

Para terminar, al día siguiente acudimos a ver a la Mike Stern Band. No iba muy motivado, porque los grupos de jazz con guitarra eléctrica que he tenido ocasión de escuchar suelen ser bastante sosetes para mi gusto (como me pasó el día anterior con Luis Gimenez). Sin embargo, el que hubiera un saxofonista para dar vida ya me empezó a dar buenas vibraciones, y el concierto me encantó. Mike Stern es uno de esos virtuosos de la guitarra capaz de cualquier cosa, y que atrajo a un ejército de heavys que destacaban mucho entre la mayoría de personas mayores que había en el resto de conciertos. Me encantó como pasaba sin ningún complejo de los tonos melódicos a los que nos tienen acostumbrados los guitarristas de jazz, a rockear con una buena dosis de distorsión. Al igual que el día anterior, tuvo un desafortunado telonero: el Trio del pianista Miguel Angel Remiro. Tampoco pegaba su lentísimo jazz cuya canción más movida fue lo que él afirmó que se trataba de una bulería, en la noche del jazz más rockero que se pueda esperar.

DOLOR

Dolor. Morirme quiero desde que el viernes me dieron la fecha para defender el PFC. Si el último día os hablaba del RELAX que supuso entregar, hoy sólo puedo hablar del dolor al saber que defiendo este viernes 21 a las 10 am.

Lo que jode no es que sea ya (que me parece genial), ni que sea temprano (que siempre me han gustado más las 11 ó las 12 del mediodía). ¡Es que es el día siguiente de la Apertura Paralela de la EUPLA!

Con lo que hemos sufrido hasta que por fin confirmaron que sí que había este año (pasó parecido a lo que en Huesca, pero el alcalde fue más duro que el de aquí). Este año que la Paralela se estrena en carpas (y que espero que no sea realmente la última, que no me extrañaría tal y como estaba el asunto) me la pierdo. Además llevaba la intención de ir ya un señor Ingeniero Técnico; pero me han arruinado mis ilusiones. No obstante, el viernes por la noche pienso montar mi propia Paralela, con casino, y con furcias. Mucho mejor que la verdadera Paralela.

Y si no posteo, no sólo es porque me paso el día pegándome cabezazos contra la pared desde que me he enterado, sino que estoy currándome una buena presentación. Esto de Beamer es la leche, cada día amó más a LATEX. Para muestra, un par de diapostivas de las que he hecho.

Redes neuronales Beamer                 Clase red beamer

RELAX

No pasa otra palabra por mi mente desde que el viernes entregué por fin mi Proyecto Fin de Carrera.

He de reconocer que no es relax absoluto puesto que aún debo ir a defender, pero se agradece poder volver a despertarse cuando te sale de los cojones sin nada que hacer, y sin molestas alarmas que te arruinan la mejor parte del sueño.

Si aún no había escrito nada es porque, como es evidente, necesitaba unos días lejos del pc, o perdiendo el tiempo con  jueguetes. Ahora, a ver si aprendo cómo utilizar Beamer para hacer una buena presentación (para la que aún no sé la fecha, pero debo estar preparado).

0 errors, 0 warnings, 0 badboxes

¿No es maravilloso cuando compilas tu precioso documento hecho en LATEX y no sale ni un maldito badbox? En que empiezas a poner imágenes es casi inevitable que se queje con alguna que quieras poner obligatoriamente aquí ([!h]) y que él prefiere mejor arriba de la página ([!ht]).

O utilizar palabros largos y complejos que no reconoce y no sabe por dónde cortar y que te salte un Overfull \hbox (6.28318pt too wide).

Por extensión, por supuesto, también es reconfortante no obtener warnings compilando cualquier otro lenguaje de programación; pero estos días lo que me da la tabarra es el  LATEX.

Teacher, I wanna make code

 Pues sí. Yo quiero programar. Entiendo que tengamos que documentarlo todo, hacer una Memoria explicando a qué necesidades responde nuestro proyecto, qué alternativas hay, razones por las que utilizar unas tecnologías u otras, detallar los métodos y como funciona… Entiendo incluso que tengamos que incluir diagramas de secuencia y de clases mediante UML que, aunque debiéramos hacerlos antes —durante las primeras fases de inicio/elaboración— para seguir una estructura, apliquemos al final utilidades de ingeniería inversaque nos las construyan automáticamente a partir del código hecho.

¡Pero lo que no soporto es la parte de la planificación! Estudiar cómo funcionará la aplicación para sacarse unos cálculos de la manga y permitan hacer una estimación del tiempo que costará. Aplicar fórmulas contando casos de uso, puntos de función, factores de complejidad, entradas de usuario… ¡Que en su mayoría no significan nada ni son aplicables a una aplicación específica! Y que además son desmedidos. Después de toda la tarde aplicando los cálculos, la estimación ha quedado en que mi proyecto requiere 2080 horas. ¡Dos mil ochenta! Eso es una maldita burrada. He hecho el 80% del proyecto en los dos últimos meses. Le he echado muchísimas horas diarias, sin tomarme fiesta la mayoría de fines de semana; pero aún así, diez horas al día durante dos meses son 600 horas. ¡Ni una tercera parte!

Pero lo peor no es esto. Es que ahora debo detallar las diversas tareas que suponen toda la realización y asignarles horas de trabajo, hasta alcanzar las 2080. Y no me gusta. ¡Teacher! ¡I wanna make code!

El nombre del post viene de una canción compuesta por Jerome Jerome, Richard Byron, Walter Kent y que, en la versión que he escuchado, interpreta Cab Calloway con la Cotton Club Orchestra en 1937. La canción es Mamma, I wanna make rhythm.

«Es la historia de un chaval que está estudia, está tocando clásico con el violín, sinfonias y  no sé qué, y lo que el quiere tocar es la batería, y ahí está su madre diciendo «ensaya, hijo, practica el violín» y él se para y dice «Mamá, yo quiero hacer ritmo»».

Toda la información anterior la contó Juan Claudio Cifuentes, Cifu para los amigos, en la emisión de Jazz Porque Sí del pasado 24 de octubre. Gracias a Pons Asinorum me enteré el mes pasado de que RTVE ha decidido a publicar sus emisiones mediante podcast, de modo que ahora puedo seguir las emisiones de este programa cuando quiera. Me aficioné para septiembre del año pasado, cuando estaba en LA sin ordenador ni nada y lo escuchaba todas las noches. Luego, siempre se me pasa, o no puedo escucharlo o algo. Ahora me los descargo tranquilamente y los escucho cuando me apetece, reescuchando todo lo que quiero. 100% recomendable.

He cortado (con el mp3splt) el fragmento en el que la presenta, junto con Go South young man —puesto que las grabaron en la misma sesión— la reproducción de ambas y sus comentarios finales. Aquí os dejo el audio.

A continuación, por curiosidad, la letra de

Mamma, I wanna make rhythm

Yasha was a prodigy, since he was a kid of three
He could play a rhapsody as good as they come
But as strange as it may be, Yasha hated melody
He had a yen for tympani, he longed to play a drum
When his Mother made him practice on the fiddle every day
He’d stop right in the middle and he’d say….

Mama, I wanna make rhythm
Don’t wanta make music
Just wanna go zoozi-zah-zah-zoozi
Ooh-cah-dee-doodle-oodle-aah-doo

Mama, I wanna get hotcha
I wanta make boombah
I wanna go gah-gah
Za-rah-kah, zat-zow, ooh-dee-lah

I’ve got no desire to carry a Stradivarius, but
There’s no limit of primitive tom-tom in my tum-tum

Mama, I wanna make rhythm
Don’t wanta make music
Just wanna go wookee-ah-kay-a-kaya-kaya
Yag-a-yag-a-yag-a-yag

¿No os encanta cómo la gente intenta reproducir las locas partes de Scat?

Mi Proyecto Fin de Carrera: Asistente para Redes MLP


ACTUALIZACIÓN POSTERIOR: Cuelgo la presentación que hice para la defensa del PFC. Igual queda más claro en qué consiste.


Bueno, como cada vez queda menos tiempo (el 12 de noviembre es la última fecha para entregar) y no sé si me dará tiempo de escribir el post sobre el Perceptrón Multicapa, me lo salto y voy a intentar explicar en qué consiste mi Proyecto Fin de Carrera; así los que me preguntan qué estoy haciendo, tienen aquí una clara (espero) explicación.

Esta semana he empezado con la documentación, y esto que pego más adelante es un primer intento de lo que será la Descripción (y Justificación) del Proyecto en la Memoria. No creo que cambie mucho la cosa.

Un posible nombre descriptivo del PFC en sí, podría ser:

Asistente para modelado de redes neuronales MLP mediante computación distribuída.

Las actividades esenciales en las que va a consistir el programa son:

  • Interfaz gráfica para facilitar el desarrollo de las redes MLP;
  • Generación automática de modelos distintos en base a los parámetros;
  • Computación distribuida de los diferentes modelos;
  • Selección automática de la red más eficiente;
  • Muestra por pantalla de los parámetros significativos de la mejor red.

Las redes neuronales (como expliqué en un anterior post) se definen por una amplia cantidad de caracteres que implican un enorme y complejo número de cálculos con ellos, lo cual significa que es muy difícil predecir exactamente el comportamiento que tomará la red con diferentes parámetros. Además, puesto que la elección de algunos es dejada al azar —como los pesos entre cada neurona— también es necesario entrenar varias veces un mismo modelo de red (con todos los parámetros igual salvo aquellos que se dejan al azar) para tratar de obtener mejores resultados.

Otro factor importante es que el cálculo del entrenamiento no se realiza inmediatamente sino que conlleva un tiempo de procesamiento nada despreciable, la elaboración de una buena red neuronal con una salida eficiente requiere unas elevadas dosis de ensayo/error; resultando una tarea harto tediosa, y que consume mucho tiempo.

Además la herramienta utilizada para el entrenamiento y ejecución de las redes —entorno/lenguaje estadístico R— funciona como lenguaje de scripting, y dado el creciente pánico y temor de la mayoría de usuarios ante la introducción de comandos en consola, y lo pesado de definir múltiples redes distintas mediante este sistema, se creará una interfaz gráfica que lo facilite.

Por todo ello, surge la necesidad de automatizar esta tarea, permitiendo la preselección de varios modelos —mediante una GUI/IGU (Graphical User Interface/Interfaz Gráfica de Usuario)— que se entrenen secuencialmente sin la constante intervención del usuario. Se permitirá la preselección de los diversos parámetros para formar las distintas redes que se desee testear, dejando que las máquinas lo calculen por sí mismas.

Dado que el total de redes puede ser bastante alto, lo que implicaría un altísimo tiempo de procesamiento, es necesario buscar una solución basada en la computación distribuida, en la que todos los modelos escogidos por el usuario se evaluen en varios servidores de cálculo repartidos en distintos ordenadores.

La solución presentada en este proyecto, va un paso más, y no sólo entrena todas las redes, sino que automatiza la selección de la red que obtiene un rendimiento más cercano al óptimo. El lenguaje R sólo realiza el entrenamiento y ejecución de las redes, devolviendo únicamente la información relevante de las mismas, sin aplicar ningún criterio de calidad. Puesto que se pretenden entrenar un elevado número de ellas, sería incómodo para el usuario compararlas una a una, de modo que se automatiza también este proceso: tanto en los servidores de cálculo para devolver su mejor red entre las diversas entrenadas, como en la máquina que solicita todos los modelos y que recibe los mejores entre ellos.

El criterio de calidad está basado en la curva ROCReceiver Operating Characteristic curve— y es el valor del área bajo la curva —Area Under Curve (AUC)—. Este criterio será explicado detalladamente más adelante.

Mente clara

Tras toda la mañana programando, y desde la hora de comer hasta media tarde me he bloquedado pensando cómo implementar una cosa. Para el Proyecto, del que aún debo alguna entrada aquí, necesito distribuir unas instrucciones entre diversos servidores de cálculo, que pueden estar ocupados computando anteriores, así que tenía que buscar una forma eficiente de comunicarse mediante mensajes para saber cuales están libres para enviarles su parte del procesamiento.

Y no se me ocurría nada decente, he pensado tumbado en la cama (muchas veces me tumbo unos instantes a pensarlo todo detenidamente y me vienen las ideas), le he dado vueltas mientras cagaba, conducía, comía… Y nada.

Así que a eso de las seis y media me he ido a escalar con un amigo, que el deporte viene bien para despejarse. Y al volver tres horas después, en la ducha, al acordarme del duro trabajo que me esperaba ahora y darle vueltas de nuevo al problema, en seguida me ha venido la solución a la cabeza.

Lo enfocaba mal, porque quería hacerlo todo con el método desde el que se solicita enviar todas las tareas a los servidores de cálculo. En la solución que he tomado, lo único que hace es enviar a todos ellos un mensaje preguntando por su estado. Lo que voy a hacer es que el método que procesa la respuesta con el estado de cada servidor, sea el que les envíe las órdenes si están libres.

Una solución sencilla en la que no había caído hasta que no he tenido la mente clara, durante la ducha después del ejercicio.