BlancaCC / TFG-Estudio-de-las-redes-neuronales

MIT License
10 stars 1 forks source link

Optimización de código utilizando características de Julia #111

Closed BlancaCC closed 2 years ago

BlancaCC commented 2 years ago

Con el fin de resolver #98 y ciertos comentarios de de @JJ en #96 me gustaría implementar un sistema de tipos por rango.

Me explico: Con el fin de evitar las condiciones internas en una función de activación, que esa disquisición se determino por el tipo. Por ejemplo una función del tipo:

x->(x < 0) ? -1 : 1

Definidos los tipos negativos sería

x::TipoNegativo-> -1
x->1

Sin embargo hay algunas cuestiones que me gustaría aclarar.

  1. ¿Verdaderamente esto mejoraría la eficiencia? En algún sitio se hará la comprobación, ¿no?
  2. Aún así , la implementación que pienso que tendría no me está gustando. He incluido los ficheros ejemplo_definition_tipos_HardTanh.jl ejemplo_definicion_tipos.jl donde dejo comentarios con mi enfoque y la cuestiones que me desagradan.

Pudiera ser que el resultado no me cuadre porque algo se me esté escapando, es por ello que agradecería la ayuda de @JJ

JJ commented 2 years ago

Con el fin de resolver #98 y ciertos comentarios de de @JJ en #96 me gustaría implementar un sistema de tipos por rango.

Me explico: Con el fin de evitar las condiciones internas en una función de activación, que esa disquisición se determino por el tipo. Por ejemplo una función del tipo:

x->(x < 0) ? -1 : 1

Definidos los tipos negativos sería

x::TipoNegativo-> -1
x->1

Sin embargo hay algunas cuestiones que me gustaría aclarar.

1. ¿Verdaderamente esto mejoraría la eficiencia? En algún sitio se hará la comprobación, ¿no?

Creo que en el caso de Julia, no necesariamente. Otra alternativa sería usar composición de funciones, que también funciona en Julia. En general, la cuestión es que la comprobación estática de tipos es más rápida, eficiente, y se puede optimizar mejor que la comprobación dinámica de valores. La composición de funciones es también muy matemática, así que igual la puedes aplicar aquí.

2. Aún así , la implementación que pienso que tendría no me está gustando.
   He incluido los ficheros   `ejemplo_definition_tipos_HardTanh.jl`
   `ejemplo_definicion_tipos.jl`  donde dejo  comentarios con mi enfoque y la cuestiones que me desagradan.

Esto es algo que tienes que trasladar a la memoria. Al final, los pasos que has tomado para cada decisión es algo que muestra el trabajo hecho y la madurez que tienes como ingeniera/matemática.

Pudiera ser que el resultado no me cuadre porque algo se me esté escapando, es por ello que agradecería la ayuda de @JJ

El resultado no es tan importante como lo que hagas para alcanzarlo. Se trata simplemente de que pruebes que tienes manejo de las capacidades de Julia y llevas a cabo diferentes experimentos para ver cuál es la mejor opción, una de las rúbricas del tribunal.