Tensorflow: Node.js (JavaScript) Wrapper-API

Erstellt am 9. Nov. 2015  ·  246Kommentare  ·  Quelle: tensorflow/tensorflow

Weil JavaScript großartig ist

contributions welcome

Hilfreichster Kommentar

+1!

Alle 246 Kommentare

+1!

+1

:+1:

+1

Genau das, wonach ich gesucht habe. :+1:

Wie von der offiziellen Website http://www.tensorflow.org/ zitiert

Wir hoffen, Sie dazu zu verleiten, SWIG-Schnittstellen zu Ihrer Lieblingssprache beizutragen – sei es Go, Java, Lua, Javascript oder R.

Ich bin neu in dieser ganzen SWIG-Sache, habe aber gesucht und das gefunden. http://www.swig.org/Doc3.0/Javascript.html

Nicht wirklich sicher, wie das funktioniert. Müssen wir eine Swig-Schnittstellendatei speziell für Javascript schreiben oder wird sie beim Ausführen einiger Befehle automatisch generiert oder arbeitet bereits jemand daran (das wäre großartig)?

+1 :+1:

+1

+1

+1

+1

👍

:+1:

+1!

Ich beginne gerade mit einem, aber neu beim Schreiben eines Nodejs-Addons. Überprüfen Sie die swig-Schnittstellendateien, um zu sehen, ob sie hilfreich sind oder ob ich einfach die c++-API verwenden sollte.

+1

+1

+1

+1

Dies ist etwas, was das Kernteam von TensorFlow in naher Zukunft wahrscheinlich nicht angehen wird. Wenn Sie also dazu beitragen möchten, machen Sie bitte weiter! Ich würde empfehlen, eine vorgeschlagene Implementierung frühzeitig in der Diskussions-Mailingliste zu verteilen, damit im Voraus ein Konsens darüber erzielt werden kann, wo eine solche API leben könnte (im Repo / Off Repo / im Verzeichnis 'contrib').

Hat jemand Lust, eine NodeJS-Bibliothek zu schreiben? :+1:
Ich denke, es wäre besser mit einer offiziellen NodeJS-API, aber eine Community-API wird meiner Meinung nach genauso (wenn nicht mehr) interessant sein. Ich weiß, dass es mehrere Möglichkeiten gibt, dies zu erreichen, aber ich empfehle dringend Node-Gyp für die Leistung. Ich werde gerne dazu beitragen, wo ich kann, aber das werde ich nicht alleine schaffen. Wäre am besten, wenn auch ein paar andere Leute interessiert sind, insbesondere jemand mit C++-Kenntnissen.

:+1:

@Foorack Ich bin bereit, es beizutragen, wenn auch einige Leute interessiert sind. Ist es möglich, die Diskussion auf einen Slack-Channel zu verschieben? (siehe #31)

@tngan Der Slack-Kanal ist privat, aber ich konnte mit dem herokuapp-Link beitreten. :+1:

Wir hoffen, dass mehr Entwickler diskutieren und dazu beitragen. Jetzt haben wir einen Slack-Channel namens nodejs (siehe #31) und ein Github-Repository node-tensorflow ist reserviert. Danke @Foorack !

Ich bin bereit, einen Beitrag zu leisten. Danke für die Initiative Jungs!

@miguelalche Schön , dass Sie interessiert sind! Bitte treten Sie dem Slack-Channel bei und jemand wird Sie zum Repository hinzufügen. ^^

Ich freue mich auf Beiträge ( speziell zusammen mit #132 ) !!

+1

Hurra für den Knoten! Lass uns das machen.

+1

+1

Hier ist eine Beschreibung zum Laden und Ausführen von TensorFlow-Graphen mit der C-API: https://medium.com/jim-fleming/loading-tensorflow-graphs-via-host-languages-be10fd81876f (Quellcode enthalten)

Der Vorschlag wird in der nächsten Woche veröffentlicht. Verfolgen Sie weiter auf https://github.com/node-tensorflow/node-tensorflow.

+1

Ich habe meinen Ausgangspunkt veröffentlicht - https://github.com/nikhilk/node-tensorflow , der später auf npm veröffentlicht wird.

@jimfleming - wie Ihr Ansatz (wir verwenden beide ffi ... ich habe es getan, um schnell anzufangen). Werden Sie APIs im Framework-Stil auf höherer Ebene erstellen, um die Python-Erfahrung zu replizieren? Das ist mein nächster Schritt.

@nikhilk Danke. Etwas wie new tf.Tensor() anstelle von tf.NewTensor() könnte eine nette Ergänzung sein, aber ich habe derzeit nicht vor, es zu erweitern. Ich bin nur daran interessiert, in Python erstellte Graphen zu laden, und ich denke, ich mag den Minimalismus.

+1

Der Vorschlag wird hier mit dem aktuellen Fortschritt veröffentlicht.
https://github.com/node-tensorflow/node-tensorflow/tree/1.0.0

Es gibt ein offenes Thema für die Diskussion.
https://github.com/node-tensorflow/node-tensorflow/issues/2

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Es wäre großartig, Tensorflow-Netzwerke auf node.js-basierten Servern problemlos ausführen zu können.

+1

+1

+1

+1

+1

+1

Ich bin sehr bereit, einen Beitrag zu leisten. @Foorack bitte füge mich zu allem hinzu, was du kannst! Ich habe dafür einen realen Anwendungsfall, daher ist es großartig, ihn gleichzeitig zu entwickeln und zu testen!!

@pushtheworldllc Ich freue mich über
Das Repository und der Vorschlag finden Sie hier: https://github.com/node-tensorflow/node-tensorflow/
Sie können diesen Link verwenden, um unserem Slack-Kanal beizutreten: https://tensor-flow-talk-invite.herokuapp.com/

+1

+1

+1

+1 :+1:

+1 :+1:

Ich habe hier einen funktionierenden Prototyp mit SWIG: https://github.com/node-tensorflow/node-tensorflow/pull/13

Die nächsten Schritte wären, die Bereiche zu definieren, die die Bindungen anfänglich abdecken würden (müssen innerhalb der C++-API liegen) und mit der Implementierung der SWIG-Schnittstellendateien für diese beginnen.

Wenn jemand Erfahrung mit SWIG hat, würde ich gerne zusammenarbeiten, da es so aussieht, als ob ein großer Teil der Python-SWIG-Schnittstellen benutzerdefinierte Überschreibungen usw. sind und ich ihre Arbeit nicht reproduzieren möchte. Darüber hinaus wäre es großartig, vom Tensorflow-Team Klarheit darüber zu bekommen, welche APIs zunächst gut behandelt werden sollten, da ich sicher bin, dass ihre Roadmap viele Änderungen enthält und ich nicht in Konflikt geraten möchte. (cc @martinwicke ?)

+1

+1 :+1:

+1

+1

+1

+1

+1

Bitte versuchen Sie es mit der Reaktionstaste --> http://www.geekwire.com/2016/github-adds-reactions-keep-comments-track/ keine +1 mehr Kommentare mehr xD

+1

:+1:

+1

+1

+1

@peterbraden entschuldigt die lange Stille. Wir bauen die C++-API aus und sie wird mit der Zeit wachsen. Ich erwarte, dass die nützlichsten Bits die Teile sind, die zum Ausführen eines vorhandenen Diagramms erforderlich sind. Die C++-Graph-Building-API wird gerade überarbeitet, daher ist es nicht besonders nützlich, viel Zeit damit zu verbringen.

Ich würde es lieben, wenn Sie eine PR erstellen würden, um diese Bindungen in contrib/nodejs einzufügen.

@martinwicke danke für die Ermutigung. Ich habe hier einen ersten Versuch gemacht: https://github.com/tensorflow/tensorflow/pull/2206 - dies ist nur ein Proof of Concept, der die Versionszeichenfolge in nodejs überträgt. Ich beginne mit der Arbeit am Hinzufügen der Swig-Schnittstellen für die Grafik, die ausgeführt wird.

+10000

+1

+1

+1

+1

+1

+1

Dies wäre interessant für den reinen Frontend-Graph-Export zur direkten Nutzung auf Web-Clients. Auch wenn die gewünschten Eingaben/Ausgaben aus dem Graphen in der exportierten JS-äquivalenten Funktion "sess.run" hartcodiert wären.

+1

:+1:

+1

+1

+1

+1

+1

Habe dies gefunden, als ich untersucht habe, ob es bereits Bindungen gibt oder nicht. Ich werde etwas Tensorfluss über die aktuelle Python-API lernen, bevor ich mehr recherchiere, aber ich habe bereits nodejs-Bindungen für C++-Bibliotheken erstellt und kann Ihnen aus Erfahrung sagen, dass swig der falsche Weg ist.

Wenn Sie einfach die Swig-Bindungen verwenden, haben Sie in einer asynchronen Umgebung synchronen Blockierungscode. Die swig-Bindungen führen keine Dinge auf IO-Threads aus, sie werden in der Hauptereignisschleife ausgeführt, soweit ich das verstehe / erfahren habe.

Sobald ich einige grundlegende Tensor-Flow-Erfahrung habe, werde ich wahrscheinlich daran interessiert sein, richtige Bindungen aufzubauen. Wenn es also jemand ernst meint und/oder mehr Details zur Arbeit mit v8-Modulen haben möchte, lassen Sie es mich wissen.

Gibt es einen Link zur Knoten-Gyp-Bindung für die Tensor-Flow-API?

@dmcmorris Ich bin ernsthaft daran interessiert,

+1

+1

+1

+1

Gibt es ein Update ??

Am 31.10.2016 um 12:06 Uhr schrieb "willshion" [email protected] :

+1


Sie erhalten dies, weil Sie einen Kommentar abgegeben haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/tensorflow/tensorflow/issues/37#issuecomment -257222936,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/ANrvwrbmShC9c0_wsNpTudKSCb0-8qt8ks5q5Yx3gaJpZM4Ge5NV
.

Alles Gute zum Jubiläum TensorFlow!

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

Ich stelle fest, dass TensorFlow jetzt von Go, Rust und Haskell aus zugänglich ist. Warum JavaScript ignorieren?

Ich warte wirklich auf eine Maschinenbibliothek in JavaScript.

+1

+1

💯 👍

+1

+1.00000000000000000000000001

+1

+1

+1

+1

Ich freue mich auf eine offizielle Node.js-API. Aber ich denke, es gibt einige Probleme.

  1. JavaScript hat nur 1 Thread, das Training kann den gesamten Prozess blockieren, es sei denn, es werden Rückrufe oder andere Tricks verwendet.
  2. Mangel an anderen wissenschaftlichen Laboren, wie Numpy
  3. JavaScript unterstützt nur 53-Bit-Präzision.

Wie auch immer, JavaScript ist großartig!

Arbeitet jemand daran?

Sieht sehr schwierig aus.

+1

brauche es sehr!

@stackOverMind. Habe ein wenig nach diesen Stichpunkten gesucht. Ich habe keines davon ausprobiert und sie sind möglicherweise nicht effizient zu verwenden / auszuführen, aber es sieht so aus, als ob es Dinge gibt, die diese Probleme möglicherweise lösen.

+1

+1

+1 pweeettyyy pwease!!!

+1

+1

Sich auf etwas freuen. 👍

+1

Sich auf etwas freuen. :+1:

👍

+1

+1. Ich habe einige Erfahrung in Node und werde mir das mal ansehen.

+1

+1 Kann es kaum erwarten, Python ist großartig, Node und JS sind auch großartig

+1

+1 nur so

+1!

+1

image

+1

+1

+1 wäre cool

+1 <3

👍

👍

+100

+1

+1

:+1:

+2

+1 ;)

Markierung

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

:+1:

+1

+1

+1

👍
Bitte !

+1

+1

Das OP-Datum war 2015, jetzt 2017 und wurde von niemandem im Projekt wirklich aufgegriffen. Ich glaube, ich bekomme vielleicht nur den Hinweis, dass in Bezug auf dieses Problem nichts passieren wird.

Weiß jemand, ob es irgendwo anders eine gesunde Diskussion über Tensorflow und Node gegeben hat, da diese +1 nicht viel zu bewirken scheinen:(

+1

# +1

👍

+1

+1

:+1:

2 Jahre her und immer noch kein Glück?

Gut. Scheiß auf Javascript.

+1,0/0,0

Inspiriert von deep_recommend_system versuche ich jetzt einen anderen Weg, um mit Node.js über Tensorflow-Serving auf das Modell zuzugreifen. Dies ist noch in Arbeit.

https://github.com/tngan/tensornode

das könnte nützlich sein keras-js

@sarkistlt Leider nein, wir sprechen NICHT von einer Javascript-Implementierung von Tensorflow, was keras.js tut, aber wir sprechen von einem nodejs- Wrapper um die C++-API von Tensorflow, daher muss man verstehen, wie man natives Add schreibt -ons für NodeJs .
Andere nützliche Quelle .
Leider besteht mein Hauptberuf nicht im Programmieren und erfordert Kenntnisse in C++, die ich persönlich nicht habe.

Übrigens macht keras.js nur Inferenz, kein Training, also keine Backpropagation.
Google - Entwickler implementiert einen kleinen Teil der Tensorflow in Javascript in ihrem Spielplatz , das neuronale Netzwerk - Implementierung ist hier und enthält Backpropagation .

Dort habe ich mit der Arbeit an der nativen nodejs-Tensorflow-Implementierung begonnen, wäre großartig, wenn jemand mitmacht
https://github.com/nodejs-tensorflow/nodejs-tensorflow

+1

+1

+1

+1

Ich freue mich sehr zu hören, dass Sie das ausprobieren @JIoJIaJIu. Das Wirkungspotenzial bei der Lösung dieses Problems ist enorm. Es ist unser am meisten empfohlenes Thema.

Auf den ersten Blick scheinen Sie bisher das Richtige zu tun. Sie haben dies in einem separaten Projekt erstellt und verwenden die TensorFlow C-API, wie zuvor von @martinwicke empfohlen.

Eine gute Möglichkeit, Mitwirkende für Ihr Projekt zu gewinnen, besteht darin, ein Designdokument mit der TensorFlow-Mailingliste zu teilen, wie Vincent vor einigen Jahren empfohlen hat . Auf diese Weise können wir einen Konsens über Ihre Vision herstellen und dazu beitragen, dass sie die bestmögliche Vision wird.

Das TensorFlow-Team möchte, dass die NodeJS-Community von TensorFlow profitiert. Daher sind wir absolut daran interessiert, dem Einzelnen zu helfen, der sich dafür engagiert, dass dies erfolgreich ist.

Wenn jemand da draußen zuhört, scheint dies die am häufigsten nachgefragte Funktion für Tensorflow zu sein:

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

+1

Hallo zusammen, ich habe die Node.js-Brückenbibliothek für Tensorflow erstellt unter: https://github.com/yorkie/tensorflow-nodejs ohne SWIG planen auch, in Zukunft weitere Clientfunktionen zu unterstützen :)

Gleichzeitig würde ich dies sehr gerne von der offiziellen Tensorflow-Gruppe zusammenführen, das wäre für mich eine kostenlose PR :)

@yorkie Das sieht interessant aus, ich werde es ausprobieren! Wir können jedoch keinen GPL-Code in TensorFlow zusammenführen.

@yorkie es sieht toll aus, dem Projekt mitmachen und deine Kräfte

@ry sicher kann ich die Lizenz sicher ändern :)
@JIoJIaJIu Ich weiß nicht, was der beste Ort ist, um dieses Repo im Moment zu verschieben, wenn dieses Repo nicht zum Verschieben von Tensorflow-Organisationen geeignet ist, denke ich, dass nodejs-tensorflow der gute Ort ist :)

Wir können jedoch keinen GPL-Code in TensorFlow zusammenführen.

@ry Aktualisiert die Lizenz auf MIT und @JIoJIaJIu ist der Gruppe beigetreten, danke für die Einladung :)

+1

+1

+1

+1

+1

JavaScript-APIs für TensorFlow wurden Anfang dieses Monats angekündigt . Details finden Sie auf der deeplearn.js- Homepage.
Ich werde diesen (großen) Fehler jetzt schließen. Fühlen Sie sich frei, andere spezifischere FRs zu öffnen.

deeplearn.js ist für Browser mit webgl, kein SDK für node.js

Meinetwegen. Ich sehe jetzt, dass der Fehlertitel direkt auf Node.js verweist.

@vincentvanhoucke es geht nicht einmal um node.js im Titel. Über "deeplearn.js" und "Tensorflow API for Javascript" zu sprechen, ist wie über Äpfel und Birnen zu sprechen.

Erstens - deeplearn.js ist eine Bibliothek, die nur zu einem gewissen Grad "den Stil der TensorFlow-API" widerspiegelt und rein im Browser arbeitet und das andere wäre eine direkte API zur ganzen Tensorflow-Güte. Es ist auch nicht annähernd eine Alternative zu Tensorflow ... vielleicht für Bastler, aber nicht für den kommerziellen Gebrauch, wo man Cluster von Maschinen braucht, um den Rechenprozess zu steuern. Ich betrachte es als Demo, was man mit JavaScript und neuronalen Netzen erreichen kann... ein Vorgeschmack auf das Kommende... ;-)

+1

+999

Jesus Christus, hör auf, Leuten nutzlose Benachrichtigungen zu schicken, es gibt einen Grund, warum GitHub 👍- und 👎-Reaktionen eingeführt hat.

+1 und +999 nervt die Leute nur und bringt keinen Mehrwert.

+1000

:+1:

+1

+1

BEACHTUNG

😄 Leute bitte bevor ihr +1 oder +was auch immer kommentiert - Bitte schaut euch den Kommentar von

Jesus Christus, hör auf, Leuten nutzlose Benachrichtigungen zu schicken, es gibt einen Grund, warum GitHub 👍- und 👎-Reaktionen eingeführt hat. +1 und +999 nervt die Leute nur und bringt keinen Mehrwert.

@shahen94 das haben wir alle gesehen, aber trotzdem ... wir sind js dev.

+1

@BruceHem bin mir nicht wirklich sicher, wie ein js-Entwickler damit zusammenhängt, unnötigen Spam blind in den Feed zu schieben ...

Sie alle wissen, dass "+1" dieses Thema nur unlesbar macht? Ich verstehe, dass wir alle den Wunsch haben, diesen Fall zu unterstützen, können aber nur ableiten, dass auf Githubs "Abstimmung" -Funktionalität mit "Reaktionen" und nicht mit einer Anzahl von Kommentaren im Thread implementiert wird ... oder übersehe ich etwas? ;-P

Lol :P Dieser Thread ist vor Jahren gestorben.
.
+1 Googolplex!

+1

Einverstanden mit @thefill absolut "+1" macht dieses Thema nur unlesbar, und tatsächlich hatten wir Community-Implementierungen. Wenn jemand TensorFlow mit Node.js oder JavaScript verwenden möchte, versuchen Sie es einfach mit den oben genannten ein oder zwei, ich denke, das könnte ein guter Anfang sein als Kommentarstimmen hier.

Was mich betrifft, ich habe an https://github.com/yorkie/tensorflow-nodejs gearbeitet , um es so funktional wie Python zu machen, und es hat noch so lange Zeit, aber es hat im Grunde eine vollständige Implementierung für die offizielle language_bindings- API . Das bedeutet, dass Sie weiterhin Python zum Erstellen von Diagrammen verwenden können, aber Modelle laden und in einer Node.js-Laufzeit ausführen. Andere Sprachen außer Python können dies derzeit auch.

Ich habe auch @ry um Hilfe

In Bezug auf die laufenden Projekte, die begonnen wurden, und insbesondere die Herausforderungen bei der Arbeit mit der C-API, habe ich einen Implementierungsvorschlag, der für mich gut funktioniert hat.

Da Python immer noch der robusteste, entwicklerfreundlichste und umfassendste Wrapper um die Tensorflow-API ist, anstatt zu versuchen, die Python-API für js "neu zu erstellen", warum nicht direkt Bindungen an die Python-API erstellen? Dies würde immer noch das Erstellen eines Knoten-C++-Add-Ons erfordern, aber anstatt direkt an die C-API zu binden, können Sie "eingebettetes" Python verwenden, um Python-Methoden direkt aus C++ auszuführen.

Dies ist im Gegensatz zu anderen JS => Python-Lösungen da draußen, die vorschlagen, einfach ein Python-Skript zu erzeugen ... Bei eingebettetem Python zeigt jedoch der Speicher, auf den von Ihrem Python-Skript / numpy-Arrays zugegriffen wird, direkt auf Ihre js-Float32Array-Puffer.

Diese Lösung funktioniert für mich sehr gut (obwohl es zugegebenermaßen ziemlich mühsam war, den anfänglichen js => C++ => Python-Flow zum Laufen zu bringen). Da ich spezielle Anforderungen habe, habe ich mich nicht an jede einzelne Python-TensorFlow-Methode gebunden, sondern nur meine Daten und Hyperparameter an einige Methoden übergeben, die den größten Teil des Diagramms bilden. Die vollständige individuelle Bindung wäre von meiner jetzigen Ausgangslage aus nicht schlecht.

Ich freue mich über alle Gedanken oder Vorschläge zu dem oben beschriebenen Ansatz. Vielen Dank.

@djimoh5 Tolle Gedanken zu JavaScript-zu-Python-APIs mit vollem Funktionsumfang! Andererseits könnten wir auch eine Implementierung eines RPC-Servers für TensorFlow-Python-APIs mit Introspektion-Funktion implementieren, damit JavaScript und andere Sprachclients auf Echtzeit-Python zugreifen können. (Ich werde das tun, wenn ich verfügbar bin, aha)

Aber hier ist etwas darüber, warum einige Python-Funktionen für JavaScript neu erstellt werden, weil sie in JavaScript geschrieben sind, sie eher für JavaScript-Entwickler geeignet sind und es für diese Entwickler einfach ist, den Quellcode zu ändern, um zu überprüfen, ob etwas anderes möglich ist, nicht nur die Feeds vom Upstream :)

+1

Ich interessiere mich auch für die Tensorflow-API von nodejs, um sie in einem knotenroten Fluss verwenden zu können, der Tensorflow-Graphen verketten würde und andere Arten von Datenanalyseknoten sein kann. Ich weiß noch nicht viel über Tensorflow. Es ist vielleicht nicht der richtige Ort, um zu fragen, aber ich würde gerne wissen, warum andere Entwickler nach einer nodejs-API/einem Add-On für Tensorflow suchen? Was wären Ihre Anwendungsfälle?

Die Antwort von

Die größten Vorteile würden sicherlich von serverseitigen Anwendungen kommen, die auf node.js arbeiten und direkt mit Tensorflow interagieren könnten, aber auch Node-Webkit (Desktop-Anwendungen) könnten potenziell Dutzende von interessanten Projekten hervorbringen.

Können die Community-Organisatoren / der Admin dieses Threads nicht einfach die Posts der Leute löschen, die absichtlich mit all den "+1" trollen, sie vielleicht sogar verbieten? Lol

Hat jemand, der an dieser Integration arbeitet, überlegt, WebAssembly (wasm) zu verwenden? Es ist möglicherweise die eleganteste Lösung für dieses Problem, indem Sie das gesamte JS umgehen, das mit Python spricht und mit C++ spricht. Ich weiß wirklich nicht viel über die Interna von TensorFlow, aber ich glaube, dass die C++-Teile von TensorFlow in wasm kompiliert werden könnten (überprüfen Sie die unterstützten MVP-Funktionen, aber Unreal Engine 4 wurde mit dem Vorgänger von wasm kompiliert und lief erfolgreich in FireFox). Nachdem die C/C++-API in wasm kompiliert wurde, müssen Sie nur sicherstellen, dass die erforderliche API verfügbar ist. wasm läuft in Node.js, allen gängigen Browsern und sogar außerhalb davon, da es sich um einen extrem portierbaren Bytecode handelt. Das scheint mir der beste Weg zu sein.

Verwandte Ressourcen/Diskussion:

+1... wir leben nicht mehr im mittelalterlichen Teil des Informationszeitalters. Bitte unterstützen Sie node.js.

Warum sollte jemand eine andere Javascript-Bibliothek brauchen? Warum sollte jemand eine JS-Bibliothek verwenden, um NNs zu trainieren? Javascropt ist eine schlecht entwickelte Sprache.

@AyalaSaenzJorge lol (da du LIEBEN ? Javascript ist zufällig die am weitesten verbreitete Sprache, die es derzeit gibt

Für diejenigen unter euch, die es ernster nehmen als diesen Troll, checkt die https://deeplearnjs.org aus ... Es wird von Tensorflow beeinflusst und von Google unterstützt ... Vielleicht können wir, anstatt bei Null anzufangen, in Betracht ziehen, es stattdessen auf Node.js zu portieren

@AyalaSaenzJorge Dies ist ein Ort für informative Kommentare, kein eigensinniger Feuerstarter.
@somombo siehe meinen Kommentar vom 26. August, in dem ich erkläre, warum deeplearnjs für diese Debatte irrelevant ist.

Okay sorry für den Kommentar.

El d. 12, 2017 18:46 Uhr, "Filip Dabrowski" [email protected]
Beschreibung:

@AyalaSaenzJorge https://github.com/ayalasaenzjorge das ist ein Ort für
informative Kommentare, kein eigensinniger Feuerstarter.
@somombo https://github.com/somombo siehe mein Kommentar vom 26. August
wo ich erkläre, warum deeplearnjs für diese Debatte irrelevant ist.


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/tensorflow/tensorflow/issues/37#issuecomment-351232483 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/AeZvKtru1EQjtRnoz6ZR36Kh-DTfVNozks5s_xBVgaJpZM4Ge5NV
.

+1

@cpple Denken +1 hinzuzufügen, da sie Lärm verursachen und durch Reaktionen ersetzt wurden. Gib dem ersten Kommentar einen Daumen nach oben

Ich möchte nur ein Update teilen - überarbeitetes https://github.com/nikhilk/node-tensorflow mit dem Plan, diese Unterstützung für die Verwendung von TensorFlow-Graphen (und später gespeicherten Modellen) für Vorhersagen / Inferenzen in node.js zu haben. Ich dachte, ich würde es teilen, da eine Reihe von Leuten Interesse an diesem Thema bekundet haben.

Ich habe einen Fork von headless-gl erstellt, der mit deeplearnjs funktioniert (was wiederum mit tensorflow funktioniert) - dies ermöglicht es, Modelle nativ auf der GPU von node.js auszuführen (beachten Sie, dass es bisher nur auf OSX getestet wurde).

Die Installationsanweisungen und ein grundlegendes Beispiel finden Sie unter https://github.com/dfoody/headless-gl
Und natürlich https://deeplearnjs.org für weitere Details.

Allgemeine Anweisungen zur Installation unter OSX:

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

Und ein kurzes Beispiel, um zu zeigen, wie es zusammen mit deeplearnjs verwendet wird:

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 vielen Dank, dass Sie dies mit der Community geteilt haben, aber die Aussage "was wiederum mit Tensorflow funktioniert" ist falsch. Deeplearn.js bietet nur (Zitat von ihrer Website) "Ausführungsmodell, das die TensorFlow-API widerspiegelt" - das ist alles, was es mit TF-Projekten gemeinsam hat, fürchte ich;-(

Bitte beachten Sie auch meinen Kommentar vom 26. August, in dem ich erkläre, warum deeplearnjs für diese Debatte irrelevant ist.

@nikhilk super , mach weiter so! Ich werde dein Projekt auf jeden Fall im Auge behalten ;-D

+1

propelml.org - Sieht interessant aus. Ich habe es nicht verwendet, aber seine GPU ist aktiviert und läuft sowohl im Browser als auch auf dem Knoten

@7ammer propelml.org sieht ziemlich vielversprechend aus. Danke, dass du das mit uns teilst ;-)

Weil NodeJS schnell ist! ;D

Wenn ein ehrgeiziges Mitglied der Community den Ruhm möchte, dieses Problem zu lösen und es in die TensorFlow-Contrib-Codebasis einfließen zu lassen, finden Sie hier einige Tipps, wie ich es tun würde. Bitte beachten Sie, dass ich dies nicht tun werde.

Sie können Knoten in den workspace.bzl wie TensorBoard tat in js.bzl .
Bitte beachten Sie, dass TensorFlow nicht von rules_nodejs abhängen

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__"],
)

Nehmen wir nun an, Sie möchten ein Node-Programm haben, zB umwandeln möchten , das Sie bazel run //tensorflow/contrib/node:generate . Eine schnelle Möglichkeit, dies in Bazel zu tun, besteht darin, ein Makro in 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"],
  )

Nun zum spaßigen Teil. Ich würde eine einzelne .js-Datei schreiben (auch wenn sie 30.000 Zeilen lang sein müsste wie ops.pbtxt und alle anderen pbtxt-Dateien in api_def/base_api . Die Ausgabe an dieses Programm wäre genau eine gigantische C++-Datei, die basierend auf diesem Beispiel mit der TensorFlow C-API und der Node C++-Addon-API kommuniziert .

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"},
)

Dann bazel build //tensorflow/contrib/node:tfnode.zip und bam, Sie haben Ihr NodeJS-Projekt gebündelt und bereit für die Verteilung an Orte wie NPM.

Wenn ich dies schreiben würde (was ich nicht tun werde), wäre es eine direkte Zuordnung der TensorFlow-API-Definitionen. Dann würde ich unsere Freunde in der Gemeinde ermutigen, die Bibliothek zu verblenden. Es gibt eine Vielzahl von Visionen zu freundlichen, modernen idiomatischen JS- und ML-APIs auf hoher Ebene, die jeweils für unterschiedliche Anwendungsfälle geeignet sind. Sie könnten jedoch alle diese Bindung gemeinsam haben.

Bitte beachten Sie, dass es Beispiele dafür gibt, wo wir bereits Sprachbindungen generieren. Inspiration finden Sie unter tensorflow/go/op/generate.go .

Es sieht so aus, als ob das TensorFlow-Team dies jetzt zur obersten Priorität macht: https://js.tensorflow.org/faq/

Vielleicht möchten wir diese Diskussion hierhin verschieben: https://github.com/tensorflow/tfjs/issues/36

Der Fortschritt der Node.js-Bindungen an die C-API wird bei diesem Problem verfolgt.

Als Update zu diesem Problem haben wir die Node.js-Bindung für TFJS als Open Source bereitgestellt: https://github.com/tensorflow/tfjs-node

Wir arbeiten hart daran, einen richtigen NPM-Build zu bekommen und werden ihn bald veröffentlichen!

Ich werde dieses Thema schließen. Bitte verfolgen Sie tensorflow/tfjs und tensorflow/tfjs-node für weitere Updates.

Verwandte und möglicherweise von Interesse: Ich habe es geschafft, TF über Webassembly im Browser zum Laufen zu bringen. Siehe https://humantoanimal.com für eine Demo; Ich werde in Zukunft mehr Details bekannt geben.

@nuchi , also haben Sie den erforderlichen TensorFlow-Code von der C-API zu WebAssembly kompiliert? Oder verwenden Sie TensorFlow.js?

@lastmjs Ich erkläre es in dem von mir bereitgestellten Link genauer. Kurzversion: Ich habe Webassembly als XLA-Kompilierungsziel hinzugefügt. Ich habe Tensorflow.js in keiner Weise verwendet.

@nuchi Tolle Arbeit! und ich kenne eine weitere WebAssemble-Recherche zu TensorFlow hier:
https://medium.com/@tomasreimers/compiling -tensorflow-for-the-browser-f3387b8e1e1c

Schön zu sehen, dass es diesbezüglich offizielle Fortschritte gibt. Ich hätte gerne schnelle, parallele GPU-Rechenleistung mit der Einfachheit und Zusammensetzbarkeit von JS.

Ich habe vor einiger Zeit angefangen, an einer

Das Konzept ähnelt dem von @jart vorgeschlagenen Ansatz.

Für das Projekt hatte ich drei Ziele vor Augen:

1. Kein Bauen oder Installieren von Tensorflow erforderlich

Stattdessen sollte es die vorgefertigten, plattformübergreifenden Python-Binärdateien herunterladen und verwenden und alle benötigten Quelldateien im Handumdrehen herunterladen.

2. Keine vollständige C++- oder JS-Reproduktion oder Abstraktion der API erforderlich

Stattdessen sollte es eine vollständige 1-zu-1-Schnittstelle mit der C-API bereitstellen , bequeme JS-Abstraktionen bietet .

3. Pflegen Sie die C-API- Bindungen nicht von Hand

Stattdessen sollte es ein Swig-Skript verwenden , um die Kerndatenstrukturen zwischen Tensorflow/stdc++/V8/node abzubilden, und der Rest wird folgen.


Ich bin damit ziemlich weit gekommen, aber zuletzt erinnere ich mich, dass ich Probleme mit TF_Session-bezogenen Segfaults hatte.

Im Moment verstaubt es nur, wenn also jemand einspringen und dabei helfen möchte, nehme ich gerne PRs an.

Schließen, da dies behoben ist

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen