Tensorflow: Node.js (JavaScript) 包装 API

创建于 2015-11-09  ·  246评论  ·  资料来源: tensorflow/tensorflow

因为 JavaScript 很棒

contributions welcome

最有用的评论

+1!

所有246条评论

+1!

+1

:+1:

+1

正是我正在寻找的。 :+1:

引自官网http://www.tensorflow.org/

我们希望吸引您为自己喜欢的语言贡献 SWIG 接口——无论是 Go、Java、Lua、Javascript 还是 R。

我对整个 SWIG 事情都不熟悉,但四处搜索并找到了这个。 http://www.swig.org/Doc3.0/Javascript.html

不太确定这是如何工作的。 我们是否需要专门为 Javascript 编写 swig 接口文件,或者它是在运行某些命令时自动生成的,还是有人已经在做这个(这太棒了)?

+1:+1:

+1

+1

+1

+1

👍

:+1:

+1!

刚刚开始,但不熟悉编写 nodejs 插件。 查看 swig 接口文件,看看它们是否会有所帮助,或者我是否应该只使用 c++ API。

+1

+1

+1

+1

这是 TensorFlow 核心团队在不久的将来不太可能解决的问题,所以如果你想贡献它,请继续! 我建议尽早在讨论邮件列表上传播一个提议的实现,以便可以提前达成关于此类 API 可能存在的位置(在 repo / off repo / 'contrib' 目录中)的共识。

有人要编写 NodeJS 库吗? :+1:
我认为使用官方的 NodeJS API 会更好,但是在我看来,社区会更有趣(如果不是更多的话)。 我知道有多种方法可以解决这个问题,但是我强烈建议使用 node-gyp 来提高性能。 我很乐意尽我所能做出贡献,但是,这是我无法独自完成的事情。 如果其他一些人也感兴趣,特别是具有 C++ 知识的人,那将是最好的。

:+1:

@Foorack如果有人也感兴趣,我愿意贡献它。 是否可以将讨论转移到松弛频道? (见#31)

@tngan slack 频道是私有的,但是我可以通过 herokuapp 链接加入。 :+1:

我们希望有更多的开发者来讨论和贡献。 现在我们有一个名为 nodejs 的 slack 通道(参见 #31),并且保留了一个 Github 存储库node-tensorflow 。 谢谢@Foorack

我愿意做出贡献。 感谢小伙伴们的主动!

@miguelalche很高兴看到您感兴趣! 请加入 slack 频道,有人会将您添加到存储库中。 ^^

我期待着做出贡献(特别是与#132 一起)!!

+1

节点万岁! 我们开工吧。

+1

+1

这是关于如何使用 C API 加载和执行 TensorFlow 图的文章: https :

该提案将在下周发布。 继续跟踪https://github.com/node-tensorflow/node-tensorflow。

+1

我已经发布了我的起点——https: //github.com/nikhilk/node-tensorflow ,稍后将发布到 npm。

@jimfleming - 就像你的方法一样(我们都在使用 ffi ......我这样做是为了快速入门)。 您是否打算构建更高级别的框架式 API 来复制 Python 体验? 那是我的下一步。

@nikhilk谢谢。 像new tf.Tensor()而不是tf.NewTensor()可能是一个不错的补充,但我目前不打算扩展它。 我只对加载在 python 中创建的图形感兴趣,我想我喜欢极简主义。

+1

该提案在此处发布,并附有当前进展。
https://github.com/node-tensorflow/node-tensorflow/tree/1.0.0

有一个开放的问题需要讨论。
https://github.com/node-tensorflow/node-tensorflow/issues/2

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

能够在基于 node.js 的服务器中轻松运行 tensorflow 网络会很棒。

+1

+1

+1

+1

+1

+1

我非常愿意做出贡献。 @Foorack请把我加到任何你能做的事情上! 我有一个真实的用例,所以同时开发和测试它会很棒!!

@pushtheworldllc我很高兴你感兴趣。 :)
存储库和提案可以在这里找到: https :
您可以使用此链接加入我们的 slack 频道: https :

+1

+1

+1

+1:+1:

+1:+1:

我在这里使用 SWIG 有一个工作原型: https :

下一步是定义绑定最初覆盖的区域(必须在 C++ API 内)并开始为这些区域实现 SWIG 接口文件。

如果有人对 SWIG 有经验,我很乐意合作,因为似乎大量的 python SWIG 接口是自定义覆盖等,我很想不重现他们的工作。 此外,从 tensorflow 团队那里得到一些关于最初涵盖哪些 API 的清晰信息会很棒,因为我确信他们的路线图在路上有很多变化,我不想发生冲突。 (抄送@martinwicke ?)

+1

+1:+1:

+1

+1

+1

+1

+1

请尝试使用反应按钮 --> http://www.geekwire.com/2016/github-adds-reactions-keep-comments-track/不再有 +1 评论 xD

+1

:+1:

+1

+1

+1

@peterbraden抱歉长时间的沉默。 我们正在构建 C++ API,它会随着时间的推移而增长。 我希望最有用的部分是运行现有图形所需的部分。 C++ 图形构建 API 现在正在重做,因此花太多时间在它上面并不是特别有用。

如果您准备了 PR 将这些绑定放入 contrib/nodejs,我会很高兴。

@martinwicke感谢您的鼓励。 我在这里做了一个初步的尝试: https :

+10000

+1

+1

+1

+1

+1

+1

这对于直接在 Web 客户端上使用的纯前端图形导出会很有趣。 即使从图中要求的所需输入/输出将在导出的 JS“sess.run”等效函数中进行硬编码。

+1

:+1:

+1

+1

+1

+1

+1

在查看绑定是否已经存在时发现了这一点。 在研究更多之前,将通过当前的 python API 学习一些张量流,但我之前已经为 C++ 库构建了 nodejs 绑定,并且可以从经验中告诉你 swig 是错误的方式。

如果您只是使用 swig 绑定,那么您将在异步环境中拥有同步阻塞代码。 swig 绑定不在 IO 线程上运行,根据我的理解/经验,它们在主事件循环上执行。

一旦我有了一些基本的张量流经验,我可能会对构建适当的绑定感兴趣。 因此,如果有人对此很认真和/或想要了解有关使用 v8 模块的更多详细信息,请告诉我。

是否有任何与张量流 API 的 node-gyp 绑定相关的链接?

@dmcmorris我非常有兴趣伸出援手! 您推荐使用哪些资源来使用 v8 模块? 我们可以在这里组建一个团队并尽快开始深入研究材料,因为这个项目已经过期了:)

+1

+1

+1

+1 秒

有更新吗??

2016 年 10 月 31 日下午 12:06,“willshion”通知@github.com 写道:

+1 秒


您收到此消息是因为您发表了评论。
直接回复本邮件,在GitHub上查看
https://github.com/tensorflow/tensorflow/issues/37#issuecomment -257222936,
或静音线程
https://github.com/notifications/unsubscribe-auth/ANrvwrbmShC9c0_wsNpTudKSCb0-8qt8ks5q5Yx3gaJpZM4Ge5NV
.

TensorFlow 周年快乐!

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

我注意到 TensorFlow 现在可以从 Go、Rust 和 Haskell 访问。 为什么忽略 JavaScript?

真的在等待 JavaScript 中的机器库。

+1

+1

💯👍

+1

+1.0000000000000000000000001

+1

+1

+1

+1

我很期待看到官方的 Node.js API。但我认为有一些问题。

  1. JavaScript 只有 1 个线程,除非使用回调或其他技巧,否则训练可以阻止整个过程。
  2. 缺乏其他科学实验室,例如 numpy
  3. JavaScript 仅支持 53 位精度。

无论如何,JavaScript 很棒!

有人在做这方面的工作吗?

看起来非常困难。

+1

非常需要!

@stackOverMind。 对这些要点进行了一些搜索。 我没有尝试过任何这些,它们的使用/运行效率可能不高,但看起来有些东西可以潜在地解决这些问题。

+1

+1

+1 pweeettyyy pwease!!!

+1

+1

期待它。 👍

+1

期待它。 :+1:

👍

+1

+1。 我在 Node 方面有一些经验,我会看看这个。

+1

+1 等不及了,Python 很棒,Node 和 JS 也很棒

+1

+1 只是为了它

+1!

+1

image

+1 👍

+1

+1会很酷

+1 <3

👍

👍

+100

+1

+1

:+1:

+2

+1;)

标记

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

:+1:

+1

+1

+1

👍
请 !

+1

+1

OP 的日期是从 2015 年开始,现在是 2017 年,项目中的任何人都没有真正注意到它。 我想我可能只是得到提示,关于这个问题不会发生任何事情。

有谁知道是否有任何关于张量流和节点的健康讨论在其他任何地方,因为这些 +1 似乎没有做太多:(

+1

# +1

👍

+1

+1

:+1:

已经2年了,仍然没有运气?

好的。 他妈的 Javascript。

+1.0/0.0

受到deep_recommend_system 的启发,我现在正在尝试另一种方法,以便通过 tensorflow 服务使用 Node.js 访问模型。 这仍在进行中。

https://github.com/tngan/tensornode

这可能很有用keras-js

@sarkistlt不幸的是,不,我们不是在谈论做 Tensorflow 的 javascript 实现, keras.js是这样做的,但我们谈论的是在 Tensorflow 的 C++ api 周围有一个 nodejs包装器,所以它需要了解如何编写本机添加- 用于 NodeJs
其他有用的来源
不幸的是,我的日常工作不是编码,它需要精通 C++,而我个人并不具备。

顺便说一句, keras.js只做推理,没有训练,所以没有反向传播。
Google 开发人员在他们的操场上用 Javascript 实现了一小部分 Tensorflow,神经网络实现在这里并且包括反向传播

我开始研究原生 nodejs Tensorflow 实现,如果有人加入会很棒
https://github.com/nodejs-tensorflow/nodejs-tensorflow

+1

+1

+1

+1

我很高兴听到您尝试@JIoJIaJIu。 解决这个问题的潜在影响是巨大的。 这是我们投票最多的问题。

粗略一看,到目前为止,您似乎在做正确的事情。 您在一个单独的项目中创建了它并使用了 TensorFlow C API,正如@martinwicke之前推荐的那样。

像 Vincent 几年前推荐的那样,通过与TensorFlow 邮件列表共享设计文档是吸引项目贡献者的一个好方法。 这样我们就可以围绕您的愿景达成共识,并帮助它成为可能的最佳愿景。

TensorFlow 团队希望 NodeJS 社区从 TensorFlow 中受益。 因此,我们绝对有兴趣帮助致力于实现这一目标的个人取得成功。

+1

大家好,我在没有 SWIG 的情况下为 Tensorflow 创建了 Node.js 桥接库:https://github.com/yorkie/tensorflow-nodejs,它支持“预定义图形运行”和非常简单的“图形构建”,我是还计划在未来支持更多的客户端功能:)

同时,我很乐意让这个被 Tensorflow 官方小组合并,这对我来说将是一个零成本的 PR :)

@yorkie看起来很有趣,我会试试的! 但是我们不能将 GPL 代码合并到 TensorFlow 中。

@yorkie看起来很棒,你想加入这个项目并联合起来吗?

@ry确定我可以肯定地更改许可证:)
@JIoJIaJIu我不知道现在移动这个 repo 的最佳位置是什么,如果这个 repo 不适合移动 tensorflow 组织,我认为 nodejs-tensorflow 是个好地方:)

但是我们不能将 GPL 代码合并到 TensorFlow 中。

@ry更新了 MIT 的许可, @JIoJIaJIu加入了群,感谢邀请 :)

+1

+1

+1

+1

+1

本月早些时候宣布了用于 TensorFlow 的 JavaScript API。 请参阅deeplearn.js主页上的详细信息。
我现在将关闭这个(广泛的)错误。 随意打开其他更具体的 FR。

deeplearn.js用于带有 webgl 的浏览器,而不是用于 node.js 的 sdk

很公平。 我现在看到错误标题直接引用了 Node.js。

@vincentvanhoucke它甚至不是关于标题中的

首先——deeplearn.js 是一个库,它只在某种程度上反映了“TensorFlow API 的风格”并且纯粹在浏览器中运行,另一个将是整个 Tensorflow 优点的直接 API。 此外,它甚至远不及被称为 Tensorflow 的替代品……可能是针对业余爱好者的,但不适用于商业用途,因为人们需要机器集群来瞄准计算过程。 我认为它是一个演示,你可以用 JavaScript 和神经网络实现什么......对未来的体验...... ;-)

+1

+999

耶稣基督,停止向人们发送无用的通知,GitHub 引入 👍 和 👎 反应是有原因的。

+1 和 +999 只会惹恼人们,不会增加任何价值。

+1000

:+1:

+1

+1

注意力

😄 伙计们,请在评论 +1 或 + 任何之前 - 请看看@k1sul1的评论

耶稣基督,停止向人们发送无用的通知,GitHub 引入 👍 和 👎 反应是有原因的。 +1 和 +999 只会惹恼人们,不会增加任何价值。

@shahen94我们都看到了,但仍然......我们是 js 开发人员。

+1

@BruceHem不太确定如何成为 js 开发人员与盲目地将不必要的垃圾邮件推送到提要...😄

你们都知道“+1”只是让这个话题不可读? 我知道我们都希望支持这个案例,但只能推断在 github 上最接近“投票”功能的东西是通过“反应”实现的,而不是线程中的评论数......或者我错过了什么? ;-P

大声笑 :P 这个帖子几年前就死了。
.
+1 Googolplex!

+1

同意@thefill绝对“+1”只会让这个话题变得不可读,实际上我们有社区实现,那么如果有人想将 TensorFlow 与 Node.js 或 JavaScript 一起使用,请尝试上述一两个,我认为这可能在这里比评论投票更好。

至于我,我在https://github.com/yorkie/tensorflow-nodejs上工作,让它像 Python 一样具有足够的功能,而且它还有很长的时间去,但它基本上已经完全实现了官方language_bindings API . 这意味着您仍然可以使用 Python 来构建图形,但加载模型并在 Node.js 运行时中运行它。 除了 Python 之外的其他语言目前也可以做到这一点。

我还寻求@ry的帮助,使我的个人存储库得到正式支持,我们必须做的事情很少,例如构建一些示例模型,尤其是 RNN 案例,但不幸的是,我必须在其他领域工作并且有这几个月没时间了,如果有人有兴趣让这件事发生,请给我发电子邮件,我很乐意指导您如何开始。 让我们以最良好的祝愿为社区做一些有用的事情:)

关于当前已经启动的项目,特别是使用 C API 的挑战,我有一个对我来说效果很好的实现建议。

由于 python 仍然是围绕 Tensorflow API 的最健壮、开发人员友好且功能齐全的包装器,而不是尝试为 js“重新创建”python API,为什么不直接创建与 python API 的绑定? 这仍然需要首先创建一个节点 C++ 附加组件,但不是直接绑定到 C API,您可以使用“嵌入式”python 直接从 C++ 运行 python 方法。

这与其他 JS => Python 解决方案不同,这些解决方案建议简单地生成一个 Python 脚本......由于进程之间的大量数据传输成本(时间),该解决方案对于任何合理规模的学习问题都不可行。 但是,使用嵌入式 python,python 脚本/numpy 数组访问的内存直接指向 js Float32Array 缓冲区。

这个解决方案对我来说非常有效(尽管无可否认,让最初的 js => C++ => python 流工作有点痛苦)。 由于我有特定的需求,我没有完成绑定到每个单独的 Python TensorFlow 方法的任务,而只是将我的数据和超参数传递给构建大部分图的几个方法。 从我目前的起点来看,完整的个人绑定不会太糟糕。

我欢迎对上述方法的任何想法或建议。 谢谢。

@djimoh5关于 JavaScript 到 Python 全功能 API 的绝妙想法! 另一方面,我们还可以为 TensorFlow Python API 实现一个具有自省功能的 RPC 服务器,以便 JavaScript 和其他语言客户端可以访问实时 Python。 (我会在有空的时候做这个,啊哈)

但是这里有一些关于为什么要为 JavaScript 重新创建一些 Python 特性的事情,因为它们是用 JavaScript 编写的,它们对 JavaScript 开发人员更友好,并且开发人员很容易修改源代码以检查是否有可能出现不同的情况,而不是只是从上游获取提要:)

+1

我也对 nodejs tensorflow API 感兴趣,以便能够在节点红色流中使用它,该流将链接 tensorflows 图,并且可能是其他类型的数据分析节点。 我仍然对 tensorflow 了解不多。 这可能不是问的正确地方,但我想知道为什么其他开发人员会为 tensorflow 寻找 nodejs api/add-on ? 你的用例是什么?

@khelkun 的回答相当简单:提供成熟的 JavaScript 包,允许与 Tensorflow 轻松交互,开启了无数新的可能性。 JavaScript 在所有移动平台、所有主要桌面操作系统和所有浏览器上运行,因此可能性是无限的。

最大的好处肯定来自在 node.js 上运行的服务器端应用程序,这些应用程序可以直接与 Tensorflow 交互,而且 node-webkit(桌面应用程序)可能会产生许多有趣的项目。

这个帖子的社区组织者/管理员是否无法简单地删除那些故意用所有“+1”拖钓甚至禁止他们的人的帖子?大声笑

有没有人考虑过使用 WebAssembly (wasm) 进行这种集成? 你知道,这可能是解决这个问题的最优雅的解决方案,将所有 JS 与 Python 对话与 C++ 对话。 我真的不太了解 TensorFlow 的内部结构,但我相信 TensorFlow 的 C++ 部分可以编译为 wasm(检查支持的 MVP 功能,但虚幻引擎 4 编译为 wasm 的前身并在 FireFox 中成功运行)。 一旦将 C/C++ API 编译为 wasm,您只需要确保公开必要的 API。 wasm 将在 Node.js、所有主要浏览器中运行,甚至可以在任何浏览器之外运行,因为它是一个非常可移植的字节码。 这对我来说似乎是最好的道路。

相关资源/讨论:

+1...我们不再生活在信息时代的中世纪部分。 请支持 node.js。

为什么有人需要另一个 Javascript 库? 为什么有人会使用 JS 库来训练神经网络? Javascropt 是一种糟糕的设计语言。

@AyalaSaenzJorge哈哈(既然你在

对于那些比这个巨魔更认真的人,请查看https://deeplearnjs.org ... 它受 tensorflow 的影响并由 Google 提供支持 ... 也许与其从头开始,我们可以考虑将其移植到 Node.js

@AyalaSaenzJorge这是一个提供信息性评论的地方,而不是一个固执己见的人。
@somombo请看我 8 月 26 日的评论,我解释了为什么 deeplearnjs 与这场辩论无关。

好的,抱歉评论。

埃尔迪克。 2017 年 12 月 12 日下午 6:46,“Filip Dabrowski”通知@ github.com
备注:

@AyalaSaenzJorge https://github.com/ayalasaenzjorge这是一个
信息丰富的评论,而不是固执己见的点火器。
@somombo https://github.com/somombo请参阅我 8 月 26 日的评论
我在这里解释了为什么 deeplearnjs 与这场辩论无关。


你收到这个是因为你被提到了。
直接回复本邮件,在GitHub上查看
https://github.com/tensorflow/tensorflow/issues/37#issuecomment-351232483
或静音线程
https://github.com/notifications/unsubscribe-auth/AeZvKtru1EQjtRnoz6ZR36Kh-DTfVNozks5s_xBVgaJpZM4Ge5NV
.

+1

@cpple记住不要添加 +1,它们会引起噪音并被反应所取代。 试着给第一条评论竖起大拇指

只是想分享一个更新——修改了https://github.com/nikhilk/node-tensorflow并计划使用 TensorFlow 图(以及后来保存的模型)在 node.js 中进行预测/推理。 我想我会分享,因为很多人都对这个问题表示了兴趣。

我创建了一个用于 deeplearnjs 的 headless-gl 分支(它反过来与 tensorflow 一起使用)——这允许模型在来自 node.js 的 GPU 上本地运行(请注意,它目前仅在 OSX 上进行过测试)。

您可以在https://github.com/dfoody/headless-gl找到安装说明和基本示例
当然,还有https://deeplearnjs.org了解更多详细信息。

在 OSX 上安装的一般说明:

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

还有一个快速示例来展示它是如何与 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感谢您与社区分享这一点,但“这反过来适用于 tensorflow”的说法是不正确的。 Deeplearn.js 只是提供(引用自他们的网站)“镜像 TensorFlow API 的执行模型”——这就是它与 TF 项目的共同之处,恐怕;-(

另请参阅我 8 月 26 日的评论,其中解释了为什么 deeplearnjs 与这场辩论无关。

@nikhilk太棒了,继续前进! 我会密切关注你的项目;-D

+1

propelml.org - 看起来很有趣。 我没有使用过它,但它启用了 GPU 并在浏览器和节点上运行

@7ammer propelml.org 看起来很有前途。 感谢您与我们一起分享这一点 ;-)

因为 NodeJS 它很快! ;D

如果社区中有一个雄心勃勃的成员想要解决这个问题,并将其合并到 TensorFlow contrib 代码库中,这里有一些关于我将如何做的提示。 请注意,我不会这样做。

您可以像 TensorBoard 在js.bzl 中所做的那样将 Node 添加到workspace.bzl中。
请注意 TensorFlow 不能依赖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__"],
)

现在假设你想要一个 Node 程序,例如tsc.js ,你想把它变成你可以bazel run //tensorflow/contrib/node:generate 。 您可以在 Bazel 中执行此操作的一种快速方法是在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"],
  )

现在是有趣的部分。 我会编写一个 .js 文件(即使它必须像tex.web一样长 30,000 行),除了 Node 标准库之外,还有零依赖项。 该程序的输入将是ops.pbtxtapi_def/base_api 中的所有其他 pbtxt 文件。 这个程序的输出将是一个巨大的 C++ 文件,它基于这个例子TensorFlow C APINode C++ Addon API对话。

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

然后你bazel build //tensorflow/contrib/node:tfnode.zip和 bam 你已经把你的 NodeJS 项目全部打包并准备好分发到像 NPM 这样的地方。

如果我写了这个(我不会),它将是 TensorFlow API 定义的准系统直接映射。 然后我会鼓励我们社区的朋友为图书馆贴面。 关于友好的现代高级惯用 JS 和 ML API 有多种不同的愿景,每一种都适合不同的用例。 但是,它们都可以共享此绑定。

请注意,有一些我们已经生成语言绑定的示例。 请参阅tensorflow/go/genop/main.gotensorflow/go/op/generate.go以获取灵感。

看起来 TensorFlow 团队现在将此作为重中之重: https :

我们可能想将此讨论移至此处: https :

将在该问题上跟踪 Node.js 绑定到 C API 的进展。

作为对这个问题的更新 - 我们已经开源了 TFJS 的 Node.js 绑定: https :

我们正在努力获得合适的 NPM 版本,并将很快发布!

我会关闭这个问题。 请跟踪 tensorflow/tfjs 和 tensorflow/tfjs-node 以获取进一步更新。

相关且可能感兴趣:我设法通过 Webassembly 在浏览器中运行 TF。 有关演示,请参阅https://humantoanimal.com ; 我将在未来提供更多细节。

@nuchi ,那么您是否将必要的 TensorFlow 代码从 C API 编译到 WebAssembly? 或者你在使用 TensorFlow.js?

@lastmjs我在我提供的链接中进行了更详细的解释。 简短版本:我添加了 Webassembly 作为 XLA 编译目标。 我没有以任何方式使用 Tensorflow.js。

@nuchi 干得好! 我在这里知道另一个关于 TensorFlow 的 WebAssemble 研究:
https://medium.com/@tomasreimers/compiling -tensorflow-for-the-browser-f3387b8e1e1c

很高兴看到这方面取得了官方进展。 我很想通过 JS 的易用性和可组合性,让快速、并行的 GPU 计算能力触手可及。

不久前我开始为 TensorFlow 开发 NodeJS 绑定,但最近没有太多空闲时间投入到它上面。

这个概念类似于@jart的建议方法。

我为这个项目设定了三个目标:

1. 不需要构建或安装 tensorflow

相反,它应该下载并使用预先构建的多平台 python 二进制文件,并即时下载任何需要的源文件。

2. 不需要完整的 C++ 或 JS 复制或 API 抽象

相反,它应该提供一个完整的与 C API 的一对一接口,尽可能

3.不要保持C API绑定

相反,它应该使用 swig 脚本来映射 Tensorflow/stdc++/V8/node 之间的核心数据结构,其余的将随之而来。


我在这方面走得很远,但最后我记得有一个与 TF_Session 相关的段错误的问题。

现在它只是在收集灰尘,所以如果有人想加入并帮助解决这个问题,我很乐意接受 PR。

解决此问题后关闭

此页面是否有帮助?
0 / 5 - 0 等级