Encadenador


Chainer es un marco de aprendizaje profundo de código abierto escrito exclusivamente en Python sobre las bibliotecas NumPy y CuPy Python. El desarrollo está liderado por la empresa de riesgo japonesa Preferred Networks en asociación con IBM , Intel , Microsoft y Nvidia . [4] [5] [6] [7]

Chainer se destaca por su temprana adopción del esquema " define-by-run ", así como por su rendimiento en sistemas a gran escala. [1] La primera versión se lanzó en junio de 2015 y desde entonces ha ganado gran popularidad en Japón. [1] [2] Además, en 2017, KDnuggets lo incluyó en la lista de los 10 principales proyectos Python de aprendizaje automático de código abierto. [8]

En diciembre de 2019, Preferred Networks anunció la transición de su esfuerzo de desarrollo de Chainer a PyTorch y solo proporcionará parches de mantenimiento después de lanzar v7. [9]

Chainer fue el primer marco de aprendizaje profundo en introducir el enfoque definido por ejecución. [10] [11] El procedimiento tradicional para entrenar una red constaba de dos fases: definir las conexiones fijas entre las operaciones matemáticas (como la multiplicación de matrices y las activaciones no lineales) en la red y luego ejecutar el cálculo de entrenamiento real. Esto se llama el enfoque de definir y ejecutar o de gráfico estático. Theano y TensorFlow se encuentran entre los marcos notables que adoptaron este enfoque. Por el contrario, en el enfoque definido por ejecución o gráfico dinámico, la conexión en una red no se determina cuando se inicia el entrenamiento. La red se determina durante el entrenamiento a medida que se realiza el cálculo real.

Una de las ventajas de este enfoque es que es intuitivo y flexible. [12] Si la red tiene flujos de control complicados, como condicionales y bucles , en el enfoque de definición y ejecución, se necesitan operaciones especialmente diseñadas para tales construcciones. Por otro lado, en el enfoque definido por ejecución, las construcciones nativas del lenguaje de programación, como declaraciones if y bucles for, se pueden usar para describir dicho flujo. Esta flexibilidad es especialmente útil para implementar redes neuronales recurrentes . [13] [14]

Otra ventaja es la facilidad de depuración . [12] En el enfoque de definir y ejecutar, si ha ocurrido un error (como un error numérico) en el cálculo de entrenamiento, a menudo es difícil inspeccionar la falla, porque el código escrito para definir la red y el lugar real de el error están separados. En el enfoque definido por ejecución, puede simplemente suspender el cálculo con el depurador incorporado del lenguaje e inspeccionar los datos que fluyen en su código de la red.