Tensorflow: API de contenedor de Node.js (JavaScript)

Creado en 9 nov. 2015  ·  246Comentarios  ·  Fuente: tensorflow/tensorflow

Porque JavaScript es genial

contributions welcome

Comentario más útil

+1!

Todos 246 comentarios

+1!

+1

: +1:

+1

Justo lo que estaba buscando. : +1:

Como se cita en el sitio web oficial http://www.tensorflow.org/

Esperamos atraerlo a que contribuya con interfaces SWIG a su idioma favorito, ya sea Go, Java, Lua, Javascript o R.

Soy nuevo en todo esto de SWIG, pero busqué y encontré esto. http://www.swig.org/Doc3.0/Javascript.html

No estoy seguro de cómo funciona esto. ¿Necesitamos escribir un archivo de interfaz swig específicamente para Javascript o se genera automáticamente cuando se ejecutan algunos comandos o alguien ya está trabajando en esto (esto sería increíble)?

+1: +1:

+1

+1

+1

+1

👍

: +1:

+1!

Acabo de comenzar con uno, pero es nuevo en la escritura de un complemento de nodejs. Verificando los archivos de la interfaz swig para ver si serán útiles, o si debería usar la API de c ++.

+1

+1

+1

+1

Esto es algo que es poco probable que el equipo central de TensorFlow aborde en un futuro cercano, así que si quieres contribuir, ¡adelante! Recomendaría hacer circular una implementación propuesta en la lista de distribución de discusión desde el principio, para que se pueda llegar a un consenso sobre dónde podría vivir dicha API (en repo / off repo / en el directorio 'contrib') con anticipación.

¿Alguien quiere escribir una biblioteca NodeJS? : +1:
Creo que sería mejor con una API oficial de NodeJS, sin embargo, una comunitaria será tan (si no más) interesante en mi opinión. Sé que hay varias formas de abordar esto, sin embargo, recomiendo encarecidamente node-gyp para mejorar el rendimiento. Con mucho gusto contribuiré en todo lo que pueda, sin embargo, esto es algo que no podré hacer solo. Sería mejor si algunas otras personas también están interesadas, especialmente alguien con conocimientos de C ++.

: +1:

@Foorack Estoy dispuesto a contribuir si algunas personas también están interesadas. ¿Es posible mover la discusión a un canal flojo? (ver # 31)

@tngan El canal slack es privado, sin embargo, pude unirme con el enlace herokuapp. : +1:

Esperamos que más desarrolladores discutan y contribuyan. Ahora tenemos un canal de holgura llamado nodejs (ver # 31), y un repositorio de Github node-tensorflow está reservado. ¡Gracias @Foorack !

Estoy dispuesto a contribuir. ¡Gracias por la iniciativa chicos!

@miguelalche ¡ Me alegra ver que estás interesado! Únase al canal slack y alguien lo agregará al repositorio. ^^

¡Espero poder contribuir (especialmente junto con el # 132)!

+1

¡Hurra por el nodo! Hagámoslo.

+1

+1

Aquí hay un artículo sobre cómo cargar y ejecutar gráficos de TensorFlow usando la API de C: https://medium.com/jim-fleming/loading-tensorflow-graphs-via-host-languages-be10fd81876f (código fuente incluido)

La propuesta se dará a conocer la próxima semana. Siga rastreando en https://github.com/node-tensorflow/node-tensorflow.

+1

He publicado mi punto de partida: https://github.com/nikhilk/node-tensorflow que se publicará en npm más adelante.

@jimfleming - como su enfoque (ambos estamos usando ffi ... lo hice para comenzar rápidamente). ¿Va a asumir la construcción de API de estilo marco de nivel superior para replicar la experiencia de Python? Ese es mi siguiente paso.

@nikhilk Gracias. Algo como new tf.Tensor() lugar de tf.NewTensor() podría ser una buena adición, pero no planeo expandirlo en este momento. Solo me interesa cargar gráficos creados en python y creo que me gusta el minimalismo.

+1

La propuesta se publica aquí con el progreso actual.
https://github.com/node-tensorflow/node-tensorflow/tree/1.0.0

Hay un tema abierto para la discusión.
https://github.com/node-tensorflow/node-tensorflow/issues/2

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Sería genial poder ejecutar fácilmente redes tensorflow en servidores basados ​​en node.js.

+1

+1

+1

+1

+1

+1

Estoy muy dispuesto a contribuir. @ Foorack, por favor,

@pushtheworldllc Me alegra que estés interesado. :)
El repositorio y la propuesta se pueden encontrar aquí: https://github.com/node-tensorflow/node-tensorflow/
Puede utilizar este enlace para unirse a nuestro canal de holgura: https://tensor-flow-talk-invite.herokuapp.com/

+1

+1

+1

+1: +1:

+1: +1:

Tengo un prototipo de trabajo usando SWIG aquí: https://github.com/node-tensorflow/node-tensorflow/pull/13

Los siguientes pasos serían definir las áreas que los enlaces cubrirían inicialmente (deben estar dentro de la API de C ++) y comenzar a implementar los archivos de interfaz SWIG para estos.

Si alguien tiene experiencia con SWIG, me encantaría colaborar, ya que parece que una gran cantidad de interfaces SWIG de Python son anulaciones personalizadas, etc. y estoy dispuesto a no reproducir su trabajo. Además, sería genial obtener algo de claridad del equipo de tensorflow sobre qué API sería bueno cubrir inicialmente, ya que estoy seguro de que su hoja de ruta tiene muchos cambios en camino, y no querría entrar en conflicto. (cc @martinwicke ?)

+1

+1: +1:

+1

+1

+1

+1

+1

por favor intente usar el botón de reacciones -> http://www.geekwire.com/2016/github-adds-reactions-keep-comments-track/ no más +1 comentarios xD

+1

: +1:

+1

+1

+1

@peterbraden perdón por el prolongado silencio. Estamos construyendo la API de C ++ y crecerá con el tiempo. Espero que los bits más útiles sean las partes que se necesitan para ejecutar un gráfico existente. La API de creación de gráficos de C ++ se está renovando en este momento, por lo que no es particularmente útil dedicarle mucho tiempo.

Me encantaría que preparara un PR para poner estos enlaces en contrib / nodejs.

@martinwicke gracias por el aliento. Hice una puñalada inicial aquí: https://github.com/tensorflow/tensorflow/pull/2206 : esto es solo una prueba de concepto que coloca la cadena de versión en nodejs. Comenzaré a trabajar en la adición de las interfaces swig para las cosas que se ejecutan en el gráfico.

+10000

+1

+1

+1

+1

+1

+1

Esto sería interesante para la exportación de gráficos frontales puros para uso directo en clientes web. Incluso si las entradas / salidas deseadas solicitadas en el gráfico estuvieran codificadas en la función equivalente "sess.run" de JS exportada.

+1

: +1:

+1

+1

+1

+1

+1

Encontré esto mientras miraba si ya existían o no fijaciones. Voy a aprender algo de flujo tensorial a través de la API de Python actual antes de investigar más, pero he creado enlaces de nodejs para bibliotecas de C ++ antes y puedo decirle por experiencia que tragar es el camino equivocado.

Si simplemente usa los enlaces swig, tendrá un código de bloqueo sincrónico en un entorno asincrónico. Los enlaces de trago no ejecutan cosas en subprocesos IO, se ejecutan en el bucle de eventos principal según lo que entiendo / experimentado.

Una vez que tenga algo de experiencia básica sobre el flujo tensorial en mi haber, probablemente me interese construir las uniones adecuadas. Entonces, si alguien se toma en serio eso y / o quiere más detalles sobre cómo trabajar con módulos v8, hágamelo saber.

¿Hay algún enlace relacionado con el enlace node-gyp para la API de flujo tensorial?

@dmcmorris ¡Estoy echar una mano! ¿Qué recursos recomienda para trabajar con módulos v8? Podemos armar un equipo aquí y comenzar a sumergirnos en los materiales lo antes posible, ya que este proyecto está muy retrasado :)

+1

+1

+1

+1

Hay alguna actualización ??

El 31 de octubre de 2016 a las 12:06 pm, "willshion" [email protected] escribió:

+1

-
Estás recibiendo esto porque hiciste un comentario.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/tensorflow/tensorflow/issues/37#issuecomment -257222936,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/ANrvwrbmShC9c0_wsNpTudKSCb0-8qt8ks5q5Yx3gaJpZM4Ge5NV
.

¡Feliz aniversario de TensorFlow!

https://research.googleblog.com/2016/11/celebrating-tensorflows-first-year.html

Observo que ahora se puede acceder a TensorFlow desde Go, Rust y Haskell. ¿Por qué ignorar JavaScript?

Realmente esperando una biblioteca de máquinas en JavaScript.

+1

+1

💯 👍

+1

+1.0000000000000000000000001

+1

+1

+1

+1

Espero ver una API oficial de Node.js. Pero creo que hay algunos problemas.

  1. JavaScript tiene solo 1 hilo, el entrenamiento puede bloquear todo el proceso a menos que use devoluciones de llamada u otros trucos.
  2. falta de otros laboratorios de ciencias, como numpy
  3. JavaScript solo admite precisión de 53 bits.

de todos modos, ¡JavaScript es increíble!

¿Alguien está trabajando en esto?

Parece muy difícil.

+1

¡Lo necesito mucho!

@stackOverMind. Hice una pequeña búsqueda en esos puntos. No probé ninguno de estos y es posible que no sean eficientes de usar / ejecutar, pero parece que existen cosas para resolver potencialmente esos problemas.

+1

+1

+1 pweeettyyy pwease !!!

+1

+1

Deseando que llegue. 👍

+1

Deseando que llegue. : +1:

👍

+1

+1. Tengo algo de experiencia en Node y echaré un vistazo a esto.

+1

+1 No puedo esperar, Python es genial, Node y JS también son geniales

+1

+1 solo por el simple hecho de hacerlo

+1!

+1

image

+1 👍

+1

+1 sería genial af

+1 <3

👍

👍

+100

+1

+1

: +1:

+2

+1;)

Marcos

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

: +1:

+1

+1

+1

👍
Por favor !

+1

+1

La fecha del OP era de 2015, ahora es 2017 y nadie en el proyecto lo ha recogido realmente. Creo que podría estar captando la indirecta de que no sucederá nada con respecto a este tema.

¿Alguien sabe si ha habido alguna discusión saludable sobre el flujo de tensores y el nodo en algún otro lugar, ya que estos +1 no parecen estar haciendo mucho?

+1

# +1

👍

+1

+1

: +1:

¿Han pasado 2 años y todavía no has tenido suerte?

Bueno. A la mierda Javascript.

+ 1.0 / 0.0

Inspirado en deep_recommend_system , ahora estoy probando otra forma de acceder al modelo con Node.js, a través del servicio de tensorflow. Esto todavía está en progreso.

https://github.com/tngan/tensornode

esto podría ser útil keras-js

@sarkistlt Desafortunadamente no, NO estamos hablando de hacer una implementación de Javascript de Tensorflow, lo que hace keras.js , pero estamos hablando de tener un contenedor nodejs alrededor de la api de C ++ de Tensorflow, por lo que requiere comprender cómo escribir add nativo -ons para NodeJs .
Otra fuente útil.
Desafortunadamente, mi trabajo diario no es la codificación y requiere competencia en C ++, que personalmente no tengo.

Por cierto, keras.js solo hace inferencias, sin entrenamiento, por lo que no se propaga hacia atrás.
Los desarrolladores de Google implementaron una pequeña porción de Tensorflow en Javascript en su patio de recreo , la implementación de la red neuronal está aquí e incluye propagación hacia atrás .

Allí comencé a trabajar en la implementación nativa de nodejs Tensorflow, sería genial si alguien se une
https://github.com/nodejs-tensorflow/nodejs-tensorflow

+1

+1

+1

+1

Estoy tan feliz de escuchar que le estás dando una oportunidad a esto @JIoJIaJIu. El potencial de impacto en la solución de este problema es enorme. Es nuestro tema más votado.

A simple vista, hasta ahora parece que estás haciendo lo correcto. Lo creaste en un proyecto separado y estás usando la API de TensorFlow C, como @martinwicke recomendó anteriormente.

Una buena manera de atraer colaboradores a su proyecto sería compartir un documento de diseño con la lista de correo de TensorFlow , como Vincent recomendó hace unos años. De esa manera, podemos generar consenso en torno a su visión y ayudar a que sea la mejor visión posible.

El equipo de TensorFlow quiere que la comunidad de NodeJS se beneficie de TensorFlow. Así que estamos absolutamente interesados ​​en ayudar a la persona que se dedica a hacer que eso suceda a tener éxito.

Si alguien está escuchando, esta parece ser la función más solicitada para Tensorflow:

https://github.com/tensorflow/tensorflow/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20sort%3Areactions-%2B1-desc

+1

Hola a todos, creé la biblioteca puente Node.js para Tensorflow en: https://github.com/yorkie/tensorflow-nodejs sin SWIG, ha admitido "ejecución de gráficos predefinidos" y una "construcción de gráficos" muy simple, estoy también planea admitir más funciones de cliente en el futuro :)

Al mismo tiempo, me complacería mucho que esto se fusionara con el grupo oficial de Tensorflow, eso sería un PR sin costo para mí :)

@yorkie Parece interesante, ¡lo probaré! Sin embargo, no podemos fusionar el código GPL en TensorFlow.

@yorkie se ve increíble, ¿te gustaría unirte al proyecto y unir fuerzas?

@ Estoy seguro de que puedo cambiar la licencia seguramente :)
@JIoJIaJIu No sé cuál es el mejor lugar para mover este repositorio por ahora, si este repositorio no es adecuado para mover tensorflow org, creo que nodejs-tensorflow es el buen lugar :)

Sin embargo, no podemos fusionar el código GPL en TensorFlow.

@ry Actualizó la licencia al MIT y @JIoJIaJIu se unió al grupo, gracias por la invitación :)

+1

+1

+1

+1

+1

Las API de JavaScript para TensorFlow se anunciaron a principios de este mes. Consulte los detalles en la página de inicio de deeplearn.js .
Cerraré este error (amplio) ahora. No dude en abrir otros FR más específicos.

deeplearn.js es para el navegador con webgl, no un sdk para node.js

Lo suficientemente justo. Veo ahora que el título del error hace referencia a Node.js directamente.

@vincentvanhoucke ni siquiera se trata de node.js en el título. Hablar de "deeplearn.js" y "API de Tensorflow para Javascript" es como hablar de manzanas y peras.

En primer lugar, deeplearn.js es una biblioteca que solo refleja hasta cierto punto "el estilo de la API de TensorFlow" y funciona exclusivamente en el navegador y la otra sería una API directa para toda la bondad de Tensorflow. Además, no está ni remotamente cerca de ser llamado una alternativa a Tensorflow ... tal vez para aficionados pero no para uso comercial, donde uno necesitaría grupos de máquinas para apuntar al proceso de computación. Lo considero una demostración de lo que se puede lograr con JavaScript y las redes neuronales ... una muestra de lo que vendrá ... ;-)

+1

+999

Jesucristo, deja de enviar a la gente notificaciones inútiles, hay una razón por la que GitHub presentó las reacciones 👍 y 👎.

+1 y +999 simplemente molestan a las personas y no agregan valor alguno.

+1000

: +1:

+1

+1

ATENCIÓN

😄 Chicos, por favor, antes de comentar +1 o + lo que sea - Por favor, echen un vistazo al

Jesucristo, deja de enviar a la gente notificaciones inútiles, hay una razón por la que GitHub presentó las reacciones 👍 y 👎. +1 y +999 simplemente molestan a las personas y no agregan valor alguno.

@ shahen94 todos vimos eso, pero aún así ... somos js dev.

+1

@BruceHem no está realmente seguro de cómo ser un desarrollador js se correlaciona con enviar a ciegas spam innecesario al feed ... 😄

¿Todos sabéis que "+1" hace que este tema sea ilegible? Entiendo que todos tenemos el deseo de apoyar este caso, pero solo puedo deducir que en lo más parecido a "votar" de github, la funcionalidad se implementa con "reacciones", no con un recuento de comentarios en el hilo ... ¿o me falta algo? ;-PAG

Lol: P este hilo murió hace años.
.
+1 Googolplex!

+1

De acuerdo con @thefill absolutamente "+1" solo hace que este tema sea ilegible, y en realidad tuvimos implementaciones de la comunidad, entonces si alguien quiere usar TensorFlow con Node.js o JavaScript, solo intente con el uno o dos anteriores, creo que esto podría Sea un buen comienzo que comentar los votos aquí.

En cuanto a mí, estaba trabajando en https://github.com/yorkie/tensorflow-nodejs para que fuera lo suficientemente funcional como Python posible, y todavía me queda mucho tiempo, pero básicamente tiene una implementación completa para la API oficial de language_bindings. . Eso significa que aún puede usar Python para crear gráficos, pero cargar modelos y ejecutarlos dentro de un tiempo de ejecución de Node.js. Otros lenguajes, excepto Python, también pueden hacer esto actualmente.

También estaba pidiendo la ayuda de @ry para hacer que mi repositorio personal sea compatible oficialmente, hay pocas cosas que tenemos que hacer como construir algunos modelos de ejemplo, especialmente casos de RNN, pero desafortunadamente tengo que trabajar en otros campos y tengo No hay tiempo para estos pocos meses, si alguien está interesado en que esto suceda, envíeme un correo electrónico, me encantaría guiarlo sobre cómo comenzar. Hagamos algo útil para la comunidad con los mejores deseos :)

Con respecto a los proyectos actuales que se han iniciado, y específicamente los desafíos de trabajar con la API de C, tengo una sugerencia sobre la implementación que me ha funcionado bien.

Dado que python sigue siendo la envoltura más robusta, fácil de desarrollar y con todas las funciones de la API de Tensorflow, en lugar de intentar "recrear" la API de python para js, ¿por qué no crear enlaces directamente a la API de python? Esto aún requeriría crear primero un complemento de nodo de C ++, pero en lugar de vincularse directamente a la API de C, puede emplear Python "incrustado" para ejecutar métodos de Python directamente desde C ++.

Esto es diferente a otras soluciones JS => Python que sugieren simplemente generar un script de Python ... una solución no viable para problemas de aprendizaje de tamaño razonable debido al extenso costo de transferencia de datos (tiempo) entre los procesos. Sin embargo, con python incrustado, la memoria a la que accede su script python / matrices numpy apunta directamente a sus búferes js Float32Array.

Esta solución está funcionando muy bien para mí (aunque es cierto que conseguir que el flujo inicial de js => C ++ => python funcione fue un poco complicado). Como tengo necesidades específicas, no he pasado por la tarea de vincularme a cada método Python TensorFlow individual, y en su lugar, simplemente paso mis datos e hiperparámetros a algunos métodos que construyen la mayor parte del gráfico. El enlace individual completo no sería tan malo desde mi punto de partida actual.

Agradezco cualquier pensamiento o sugerencia sobre el enfoque descrito anteriormente. Gracias.

@ djimoh5 ¡ Impresionantes pensamientos sobre JavaScript para las API con todas las funciones de Python! Por otro lado, también podríamos implementar una implementación de un servidor RPC para las API de TensorFlow Python con función de introspección, de modo que JavaScript y otros clientes de lenguaje pudieran acceder a Python en tiempo real. (Haré esto cuando esté disponible, aha)

Pero aquí hay algo sobre por qué volver a crear algunas características de Python para JavaScript, porque están escritas en JavaScript, son más amigables para los desarrolladores de JavaScript, y es fácil para los desarrolladores modificar el código fuente para verificar si es posible algo diferente, no solo obtener feeds desde aguas arriba :)

+1

También estoy interesado en la API de nodejs tensorflow para poder usarla en flujos de nodo rojo que encadenarían gráficos de tensorflows y pueden ser otros tipos de nodos de análisis de datos. Todavía no sé mucho sobre tensorflow. Puede que no sea el lugar adecuado para preguntar, pero me gustaría saber por qué otros desarrolladores buscan una API / complemento de nodejs para tensorflow. ¿Cuáles serían sus casos de uso?

La respuesta de

Los mayores beneficios vendrían sin duda de las aplicaciones del lado del servidor que operan en node.js que podrían interactuar directamente con Tensorflow, pero también node-webkit (aplicaciones de escritorio) podrían generar docenas de proyectos interesantes.

¿Los organizadores / administradores de la comunidad de este hilo no pueden simplemente eliminar las publicaciones de aquellas personas que intencionalmente trollean con todos los "+1" tal vez incluso las prohiban?

¿Alguien que trabaja en esta integración ha considerado usar WebAssembly (wasm)? Es potencialmente la solución más elegante para este problema, dejando de lado a todos los JS que hablan con Python que hablan con C ++, ya sabes. Realmente no sé mucho sobre las funciones internas de TensorFlow, pero creo que las partes C ++ de TensorFlow podrían compilarse en wasm (verifique las funciones de MVP compatibles, pero Unreal Engine 4 se compiló en el predecesor de wasm y se ejecutó correctamente en FireFox). Una vez que la API de C / C ++ está compilada en wasm, solo necesita asegurarse de que la API necesaria esté expuesta. wasm se ejecutará en Node.js, todos los navegadores principales, e incluso fuera de cualquiera de ellos, ya que está destinado a ser un código de bytes extremadamente portátil. Este me parece el mejor camino a seguir.

Recursos / discusión relacionados:

+1 ... ya no vivimos en la parte medieval de la era de la información. Por favor, apoye a node.js.

¿Por qué alguien necesitaría otra biblioteca de Javascript? ¿Por qué alguien usaría una biblioteca JS para entrenar NN? Javascropt es un lenguaje mal diseñado.

@AyalaSaenzJorge lol (ya que estás troleando por qué no lo hago yo) ... ¿Qué tal si AMAMOS los lenguajes "mal" diseñados? Javascript pasa a ser el lenguaje más prevalente actualmente en existencia .. más código (en la tierra) está escrito en javascript que CUALQUIER otro lenguaje de alto nivel .. Y eso es un HECHO y nunca va a desaparecer lo siento lol

Para aquellos de ustedes más serios que este troll, revisen https://deeplearnjs.org ... Está influenciado por tensorflow y respaldado por Google ... Quizás, en lugar de comenzar desde cero, podemos considerar portarlo a Node.js.

@AyalaSaenzJorge este es un lugar para comentarios informativos, no para personas obstinadas.
@somombo, por favor vea mi comentario del 26 de agosto donde explico por qué deeplearnjs es irrelevante para este debate.

Ok perdón por el comentario.

El dic. 12, 2017 6:46 p. M., "Filip Dabrowski" [email protected]
escribió:

@AyalaSaenzJorge https://github.com/ayalasaenzjorge este es un lugar para
comentarios informativos, no un bromista obstinado.
@somombo https://github.com/somombo por favor vea mi comentario del 26 de agosto
donde explico por qué deeplearnjs es irrelevante para este debate.

-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/tensorflow/tensorflow/issues/37#issuecomment-351232483 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AeZvKtru1EQjtRnoz6ZR36Kh-DTfVNozks5s_xBVgaJpZM4Ge5NV
.

+1

@cpple Recuerda no agregar +1, causan ruido y han sido reemplazados por reacciones. Intenta dar un pulgar hacia arriba al primer comentario

Solo quiero compartir una actualización: https://github.com/nikhilk/node-tensorflow renovado con un plan para tener ese soporte usando gráficos de TensorFlow (y más tarde, modelos guardados) para la predicción / inferencia en node.js. Pensé que compartiría ya que varias personas han expresado interés en este tema.

Creé una bifurcación de headless-gl que funciona con deeplearnjs (que a su vez funciona con tensorflow); esto permite que los modelos se ejecuten de forma nativa en la GPU desde node.js (tenga en cuenta que solo se ha probado en OSX hasta ahora).

Puede encontrar las instrucciones de instalación y una muestra básica en https://github.com/dfoody/headless-gl
Y, por supuesto, https://deeplearnjs.org para obtener más detalles.

Instrucciones generales para instalar en OSX:

brew install pkg-config cairo pango libpng jpeg giflib
npm install deeplearn-gl
npm install deeplearn

Y una muestra rápida para mostrar cómo se usa junto con deeplearnjs:

var gl = require('deeplearn-gl')
var dl = require('deeplearn');
var math = new dl.NDArrayMath('webgl');
var size = 3000;

var start = Date.now();

var a = dl.Array2D.ones([size, size]);
var b = dl.Array2D.ones([size, size]);

var result = math.matMul(a, b);

var promise = result.data().then(function(data) {
  console.log("done in ", (Date.now()-start)/1000, "seconds with value", data[0]);
}).catch(console.log);

@dfoody gracias por compartir esto con la comunidad, pero la declaración "que a su vez funciona con tensorflow" es incorrecta. Deeplearn.js solo proporciona (cita de su sitio web) "modelo de ejecución que refleja la API de TensorFlow"; eso es todo lo que tiene en común con el proyecto TF, me temo ;-(

También vea mi comentario del 26 de agosto donde explico por qué deeplearnjs es irrelevante para este debate.

@nikhilk increíble, ¡sigue adelante! Seguro que vigilaré tu proyecto ;-D

+1

propelml.org - Parece interesante. No lo he usado, pero su GPU está habilitada y se ejecuta tanto en el navegador como en el nodo.

@ 7ammer propelml.org parece bastante prometedor. Gracias por compartir esto con nosotros ;-)

¡Porque NodeJS es rápido! ;D

Si un miembro ambicioso de la comunidad quiere la gloria de resolver este problema y fusionarlo con la base de código contrib de TensorFlow, aquí hay algunos consejos sobre cómo lo haría. Tenga en cuenta que no voy a hacer esto.

Puede agregar Node a workspace.bzl como lo hizo TensorBoard en
Tenga en cuenta que TensorFlow no puede depender de rules_nodejs .

load("@io_bazel_rules_closure//closure:defs.bzl", "filegroup_external")

filegroup_external(
    name = "org_nodejs",
    # MIT with portions licensed:
    # - MIT
    # - Old MIT
    # - 2-Clause-BSD
    # - 3-Clause-BSD
    # - ISC
    # - Unicode
    # - zlib
    # - Artistic 2.0
    licenses = ["notice"],
    sha256_urls_extract_macos = {
        "910395e1e98fb351c62b5702a9deef22aaecf05d6df1d7edc283337542207f3f": [
            "https://mirror.bazel.build/nodejs.org/dist/v6.9.1/node-v6.9.1-darwin-x64.tar.xz",
            "http://nodejs.org/dist/v6.9.1/node-v6.9.1-darwin-x64.tar.xz",
        ],
    },
    sha256_urls_windows = {
        "1914bfb950be8d576ce9e49c8a0e51c9f2402560fe3c19093e69bc1306a56e9e": [
            "https://mirror.bazel.build/raw.githubusercontent.com/nodejs/node/v6.9.1/LICENSE",
            "https://raw.githubusercontent.com/nodejs/node/v6.9.1/LICENSE",
        ],
        "513923b0490ebb7466a56483a62595814ed9d036d6f35476debb0cd606bec526": [
            "https://mirror.bazel.build/nodejs.org/dist/v6.9.1/win-x64/node.exe",
            "http://nodejs.org/dist/v6.9.1/win-x64/node.exe",
        ],
        "3951aefa4afd6fb836ab06468b1fc2a69fa75bd66ec2f5a0e08c4e32547681e3": [
            "https://mirror.bazel.build/nodejs.org/dist/v6.9.1/win-x64/node.lib",
            "http://nodejs.org/dist/v6.9.1/win-x64/node.lib",
        ],
    },
    sha256_urls_extract = {
        "d4eb161e4715e11bbef816a6c577974271e2bddae9cf008744627676ff00036a": [
            "https://mirror.bazel.build/nodejs.org/dist/v6.9.1/node-v6.9.1-linux-x64.tar.xz",
            "http://nodejs.org/dist/v6.9.1/node-v6.9.1-linux-x64.tar.xz",
        ],
    },
    strip_prefix = {
        "node-v6.9.1-darwin-x64.tar.xz": "node-v6.9.1-darwin-x64",
        "node-v6.9.1-linux-x64.tar.xz": "node-v6.9.1-linux-x64",
    },
    executable = [
        "node",
        "node.exe",
    ],
    default_visibility = ["//tensorflow/contrib/node:__subpackages__"],
)

Ahora digamos que quieres tener un programa de nodo, por ejemplo tsc.js , que quieres convertir en algo que puedas bazel run //tensorflow/contrib/node:generate . Una forma rápida de hacer esto en Bazel es definiendo una macro en tensorflow/contrib/node/defs.bzl :

def node_binary(name, srcs, data=None, visibility=None, testonly=None, **kwargs):
  native.sh_binary(
      name = name,
      srcs = [name + ".sh"],
      data = srcs + data + ["@org_nodejs"],
      testonly = testonly,
      visibility = visibility,
      **kwargs
  )

  native.genrule(
      name = name + "_sh",
      srcs = [srcs[0]],
      outs = [name + ".sh"],
      cmd = "cat >$@ <<'EOF'\n" +
            "#!/bin/bash\n" +
            "NODE=external/org_nodejs/bin/node\n" +
            "if [[ -e external/org_nodejs/node.exe ]]; then\n" +
            "  NODE=external/org_nodejs/node.exe\n" +
            "fi\n" +
            "exec $${NODE} $(location " + srcs[0] + ") \"$$@\"\n" +
            "EOF",
      executable = True,
      testonly = testonly,
      visibility = ["//visibility:private"],
  )

Ahora viene la parte divertida. Escribiría un solo archivo .js (incluso si tuviera que tener 30,000 líneas de largo como tex.web ) sin dependencias distintas de la biblioteca estándar de Node. Las entradas para este programa serían ops.pbtxt y todos los demás archivos pbtxt en API de TensorFlow C y la complemento de Node C ++ según este ejemplo .

load("//tensorflow/contrib/node:defs.bzl", "node_binary")
load("@domain_registry//java/google/registry/builddefs:zip_file.bzl", "zip_file")

node_binary(
    name = "generate",
    srcs = ["generate.js"],
    data = [
        "//tensorflow/core:ops/ops.pbtxt",
        "//tensorflow/core/api_def:base_api_def",
    ],
)

genrule(
    name = "api",
    srcs = [
        "//tensorflow/core:ops/ops.pbtxt",
        "//tensorflow/core/api_def:base_api_def",
    ],
    cmd = "$(location :generate) $(location api.cc) $(SRCS)",
    outs = ["api.cc"],
    tools = [":generate"],
)

zip_file(
    name = "tfnode",
    srcs = [
        "package.json",
        "README.md",
        "api.cc",
        "binding.gyp",
        "tfnode.js",
    ],
    mappings = {"tensorflow/contrib/node": "package"},
)

Luego bazel build //tensorflow/contrib/node:tfnode.zip y bam, tienes tu proyecto NodeJS todo empaquetado y listo para su distribución a lugares como NPM.

Si escribiera esto (que no lo haré), sería un mapeo directo básico de las definiciones de la API de TensorFlow. Luego, animaría a nuestros amigos de la comunidad a revestir la biblioteca. Existe una diversidad de visiones sobre las API de ML y JS idiomáticas modernas y amigables de alto nivel, cada una de las cuales se adapta a diferentes casos de uso. Sin embargo, todos podrían compartir esta vinculación en común.

Tenga en cuenta que hay ejemplos en los que ya generamos enlaces de idioma. Consulte tensorflow / go / genop / main.go y tensorflow / go / op / generate.go para obtener inspiración.

Parece que el equipo de TensorFlow está haciendo de esto una prioridad máxima ahora: https://js.tensorflow.org/faq/

Es posible que deseemos mover esta discusión aquí: https://github.com/tensorflow/tfjs/issues/36

El progreso de los enlaces de Node.js a la API de C se realizará un seguimiento en ese problema.

Como actualización de este problema, hemos abierto el enlace de Node.js para TFJS: https://github.com/tensorflow/tfjs-node

¡Estamos trabajando duro para obtener una compilación adecuada de NPM y la lanzaremos pronto!

Cerraré este tema. Realice un seguimiento de tensorflow / tfjs y tensorflow / tfjs-node para obtener más actualizaciones.

Relacionado y posiblemente de interés: logré que TF se ejecutara en el navegador a través de Webassembly. Consulte https://humantoanimal.com para ver una demostración; Proporcionaré más detalles en el futuro.

@nuchi , ¿

@lastmjs lo explico con más detalle en el enlace que proporcioné. Versión corta: agregué Webassembly como un objetivo de compilación de XLA. No usé Tensorflow.js de ninguna manera.

@nuchi ¡
https://medium.com/@tomasreimers/compiling -tensorflow-for-the-browser-f3387b8e1e1c

Me alegra ver que hay un progreso oficial en esto. Me encantaría tener al alcance de mi mano la potencia de cómputo de GPU paralela y rápida con la facilidad y la capacidad de composición de JS.

Comencé a trabajar en un enlace NodeJS para TensorFlow hace un tiempo, pero últimamente no he tenido mucho tiempo libre para dedicarlo.

El concepto es similar al enfoque sugerido por @jart .

Tenía tres objetivos en mente para el proyecto:

1. No es necesario crear ni instalar tensorflow

En su lugar, debe descargar y usar los binarios de Python multiplataforma preconstruidos y descargar los archivos fuente necesarios sobre la marcha.

2. No requiere una abstracción o reproducción completa de C ++ o JS de la API

En su lugar, debería proporcionar una interfaz completa 1 a 1 con la API de C, proporcionando abstracciones JS convenientes tanto como sea posible.

3. No debe mantenerse la API C fijaciones por parte

En su lugar, debería usar un script swig para mapear las estructuras de datos centrales entre Tensorflow / stdc ++ / V8 / node y el resto seguirá.


Llegué bastante lejos con esto, pero lo último que recuerdo fue tener problemas con los segfaults relacionados con TF_Session.

En este momento solo está acumulando polvo, así que si alguien quiere intervenir y ayudar con esto, con mucho gusto acepto relaciones públicas.

Cerrando cuando esto se resuelva

¿Fue útil esta página
0 / 5 - 0 calificaciones