Tensorflow: Node.js (JavaScript) API оболочки

Созданный на 9 нояб. 2015  ·  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

Не совсем уверен, как это работает. Нужно ли нам писать файл интерфейса swig специально для Javascript, или он автоматически генерируется при выполнении некоторых команд, или кто-то уже работает над этим (это было бы здорово)?

+1: +1:

+1

+1

+1

+1

👍

: +1:

+1!

Только начинаю с одного, но новичок в написании аддона nodejs. Проверяю файлы интерфейса swig, чтобы узнать, будут ли они полезны, или мне следует просто использовать API C ++.

+1

+1

+1

+1

Это то, чем основная команда TensorFlow вряд ли займется в ближайшем будущем, поэтому, если вы хотите внести свой вклад, пожалуйста, продолжайте! Я бы рекомендовал распространить предлагаемую реализацию в списке рассылки обсуждения на ранней стадии, чтобы можно было заранее достичь консенсуса относительно того, где может находиться такой API (в репо / вне репо / в каталоге contrib).

Кто-нибудь хочет написать библиотеку NodeJS? : +1:
Я думаю, что было бы лучше с официальным API NodeJS, однако, на мой взгляд, сообщество будет не менее (если не более) интересно. Я знаю, что есть несколько способов приблизиться к этому, но я настоятельно рекомендую node-gyp для повышения производительности. Я с радостью внесу свой вклад любым возможным способом, однако это то, что я не смогу сделать в одиночку. Было бы лучше, если бы несколько других людей тоже заинтересовались, особенно кто-то со знанием C ++.

: +1:

@Foorack Я готов внести свой вклад, если кому-то это тоже интересно. Можно ли переместить обсуждение в слабый канал? (см. №31)

@tngan Канал

Мы надеемся, что больше разработчиков будут обсуждать и вносить свой вклад. Теперь у нас есть резервный канал с именем nodejs (см. №31), а поток node -tensorflow репозитория Github зарезервирован. Спасибо @Foorack !

Я готов внести свой вклад. Спасибо за инициативу, ребята!

@miguelalche Рад видеть, что вы заинтересованы! Присоединяйтесь к каналу Slack, и кто-нибудь добавит вас в репозиторий. ^^

Я с нетерпением жду вашего участия (особенно вместе с № 132) !!

+1

Ура узлу! Давай сделаем это.

+1

+1

Вот запись о том, как загружать и выполнять графики TensorFlow с помощью C API: https://medium.com/jim-fleming/loading-tensorflow-graphs-via-host-languages-be10fd81876f (включая исходный код)

Предложение будет опубликовано на следующей неделе. Продолжайте отслеживать на 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.

+1

+1

+1

+1

+1

+1

Я очень хочу внести свой вклад. @Foorack, пожалуйста, добавьте меня к тому, что вы можете! У меня есть реальный пример использования этого, так что было бы здорово разрабатывать и тестировать его одновременно !!

@pushtheworldllc Я рад, что вам интересно. :)
Репозиторий и предложение можно найти здесь: https://github.com/node-tensorflow/node-tensorflow/
Вы можете использовать эту ссылку, чтобы присоединиться к нашему каналу Slack: https://tensor-flow-talk-invite.herokuapp.com/

+1

+1

+1

+1: +1:

+1: +1:

У меня есть рабочий прототип с использованием SWIG: https://github.com/node-tensorflow/node-tensorflow/pull/13

Следующими шагами будет определение областей, которые привязки будут первоначально охватывать (должны находиться в C ++ API), и начать реализацию для них файлов интерфейса SWIG.

Если у кого-то есть опыт работы с SWIG, я бы хотел сотрудничать, так как кажется, что огромное количество интерфейсов SWIG python являются настраиваемыми переопределениями и т. Д., И я очень стараюсь не воспроизводить их работу. Кроме того, было бы здорово получить некоторую ясность от команды tensorflow в отношении того, какие API было бы полезно изначально охватить, поскольку я уверен, что их дорожная карта имеет много изменений, и я не хотел бы конфликтовать. (cc @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, и со временем он будет расти. Я ожидаю, что наиболее полезными будут части, необходимые для запуска существующего графа. API построения графиков C ++ сейчас переделывается, так что тратить на это много времени не особо полезно.

Мне бы очень хотелось, чтобы вы подготовили PR, чтобы поместить эти привязки в contrib / nodejs.

@martinwicke, спасибо за поддержку. Я сделал первый удар здесь: https://github.com/tensorflow/tensorflow/pull/2206 - это просто доказательство концепции, которая передает строку версии в nodejs. Я начну работу над добавлением swig-интерфейсов для работы с графами.

+10000

+1

+1

+1

+1

+1

+1

Это было бы интересно для чистого экспорта графов из внешнего интерфейса для прямого использования в веб-клиентах. Даже если желаемые входы / выходы, запрошенные из графика, будут жестко закодированы в экспортированной эквивалентной функции JS "sessions.run".

+1

: +1:

+1

+1

+1

+1

+1

Обнаружил это, когда изучал, существуют ли привязки. Собираюсь изучить некоторый тензорный поток через текущий API Python, прежде чем исследовать больше, но я уже создавал привязки nodejs для библиотек C ++ и раньше могу сказать вам, что swig - неправильный путь.

Если вы просто используете привязки swig, тогда у вас будет синхронный блокирующий код в асинхронной среде. Привязки swig не запускают вещи в потоках ввода-вывода, они выполняются в основном цикле событий из того, что я понимаю / испытал.

Как только у меня появится некоторый базовый опыт работы с тензорным потоком, я, вероятно, буду заинтересован в построении правильных привязок. Так что, если кто-то серьезно относится к этому и / или хочет получить более подробную информацию о работе с модулями v8, дайте мне знать.

Есть ли какая-либо ссылка, связанная с привязкой node-gyp для API тензорного потока ??

@dmcmorris Я серьезно заинтересован в том, чтобы протянуть руку помощи! Какие ресурсы вы рекомендуете для работы с модулями v8? Мы можем собрать здесь команду и начать нырять в материалы как можно скорее, так как этот проект уже давно назрел :)

+1

+1

+1

+1 с

Есть ли обновление ??

31 октября 2016 г. в 12:06 "willshion" [email protected] написал:

+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

Используйте синаптический https://github.com/cazala/synaptic

Вдохновленный deep_recommend_system , я сейчас пробую другой способ доступа к модели с помощью Node.js, через обслуживание тензорного потока. Это все еще продолжается.

https://github.com/tngan/tensornode

это может быть полезно keras-js

@sarkistlt К сожалению, нет, мы НЕ говорим о реализации Javascript Tensorflow, что делает keras.js , но мы говорим о наличии оболочки nodejs вокруг C ++ api Tensorflow, поэтому требуется понимание того, как писать собственное добавление -оны для NodeJs .
Другой полезный источник .
К сожалению, моя повседневная работа не связана с программированием и требует знания C ++, которого у меня лично нет.

Кстати, keras.js делает только вывод, без обучения, поэтому без обратного распространения.
Разработчики Google реализовали небольшую часть Tensorflow в Javascript на своей игровой площадке , реализация нейронной сети здесь и включает обратное распространение .

Я начал работу над собственной реализацией nodejs Tensorflow, было бы здорово, если бы кто-нибудь присоединился
https://github.com/nodejs-tensorflow/nodejs-tensorflow

+1

+1

+1

+1

Я так рада услышать, что вы попробовали это @JIoJIaJIu. Потенциал воздействия в решении этой проблемы огромен. Это наша самая популярная проблема.

На первый взгляд кажется, что вы поступаете правильно. Вы создали это в отдельном проекте и используете TensorFlow C API, как ранее рекомендовал

Хороший способ привлечь участников к вашему проекту - поделиться дизайнерской документацией со списком рассылки TensorFlow , как Винсент рекомендовал несколько лет назад. Таким образом, мы сможем достичь консенсуса вокруг вашего видения и помочь ему стать наилучшим из возможных.

Команда TensorFlow хочет, чтобы сообщество NodeJS получило пользу от TensorFlow. Так что мы абсолютно заинтересованы в том, чтобы помочь человеку, посвятившему себя этому делу, добиться успеха.

Если кто-то слушает, эта функция кажется наиболее востребованной для Tensorflow:

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

+1

Привет всем, я создал мостовую библиотеку Node.js для Tensorflow по адресу: https://github.com/yorkie/tensorflow-nodejs без SWIG, он поддерживает «предопределенный запуск графа» и очень простое «построение графа», я также планирую поддерживать больше клиентских функций в будущем :)

В то же время я был бы очень рад, если бы это было объединено официальной группой Tensorflow, для меня это был бы бесплатный пиар :)

@yorkie Выглядит интересно, попробую! Однако мы не можем объединить код GPL с TensorFlow.

@yorkie выглядит потрясающе, не хотите ли присоединиться к проекту и объединить усилия?

@ry, конечно, я могу сменить лицензию :)
@JIoJIaJIu Я не знаю, где лучше всего переместить это репо на данный момент, если это репо не подходит для перемещения tenorflow org, я думаю, что nodejs-tensorflow - хорошее место :)

Однако мы не можем объединить код GPL с TensorFlow.

@ry Обновил лицензию до MIT и @JIoJIaJIu присоединился к группе, спасибо за приглашение :)

+1

+1

+1

+1

+1

API JavaScript для TensorFlow были анонсированы ранее в этом месяце. Подробности смотрите на домашней странице deeplearn.js .
Я сейчас закрою эту (широкую) ошибку. Не стесняйтесь открывать другие более конкретные FR.

deeplearn.js предназначен для браузера с webgl, а не sdk для node.js

Справедливо. Теперь я вижу, что заголовок ошибки напрямую ссылается на Node.js.

@vincentvanhoucke даже не о node.js в названии. Говорить о «deeplearn.js» и «Tensorflow API для Javascript» все равно что говорить о яблоках и грушах.

Прежде всего, deeplearn.js - это библиотека, которая лишь до некоторой степени отражает «стиль TensorFlow API» и работает исключительно в браузере, а другая будет прямым API для всего совершенства Tensorflow. Кроме того, это даже отдаленно не похоже на то, чтобы называться альтернативой Tensorflow ... может быть, для любителей, но не для коммерческого использования, где нужны кластеры машин для нацеливания вычислительного процесса. Я думаю об этом как о демонстрации того, чего вы можете достичь с помощью JavaScript и нейронных сетей ... вкус будущего ... ;-)

+1

+999

Господи, перестань присылать людям бесполезные уведомления, есть причина, по которой GitHub ввел реакции 👍 и 👎.

+1 и +999 просто раздражают людей и не добавляют никакой ценности.

+1000

: +1:

+1

+1

ВНИМАНИЕ

😄 Ребята, пожалуйста, прежде чем комментировать +1 или + что угодно - пожалуйста, посмотрите комментарий @ k1sul1

Господи, перестань присылать людям бесполезные уведомления, есть причина, по которой GitHub ввел реакции 👍 и 👎. +1 и +999 просто раздражают людей и не добавляют никакой ценности.

@ shahen94, мы все это видели, но все же ... мы js dev.

+1

@BruceHem не совсем уверен, как быть разработчиком js соотносится с слепым размещением ненужного спама в ленте ... 😄

Вы все в курсе, что «+1» просто делает эту тему нечитаемой? Я понимаю, что у всех нас есть желание поддержать этот случай, но мы можем только вычесть, что на github, наиболее близком к функции «голосования», реализована функция «реакции», а не количество комментариев в ветке ... или я что-то упускаю? ;-П

Lol: P эта ветка умерла много лет назад.
.
+1 Гуголплекс!

+1

Согласованный с @thefill абсолютно "+1" просто делает эту тему нечитаемой, и на самом деле у нас были реализации сообщества, тогда, если кто-то хочет использовать TensorFlow с Node.js или JavaScript, просто попробуйте с одним или двумя выше, я думаю, это может будет хорошим началом, чем комментировать голоса здесь.

Что касается меня, я работал над https://github.com/yorkie/tensorflow-nodejs, чтобы сделать его достаточно функциональным, как Python, и у него еще так много времени, но он в основном имеет полную реализацию для официального API language_bindings . Это означает, что вы по-прежнему можете использовать Python для построения графика, но загружать модели и запускать их в среде выполнения Node.js. Другие языки, кроме Python, в настоящее время также могут это делать.

Я также просил помощи у @ry, чтобы сделать мой личный репозиторий официально поддерживаемым, есть несколько вещей, которые мы должны сделать, например, построить некоторые примерные модели, особенно случаи RNN, но, к сожалению, мне нужно поработать в других областях и иметь Нет времени на эти несколько месяцев, если кто-то заинтересован в том, чтобы это произошло, напишите мне, я с удовольствием подскажу, как начать. Давайте сделаем что-нибудь полезное для сообщества с наилучшими пожеланиями :)

Что касается текущих проектов, которые были начаты, и, в частности, проблем, связанных с работой с C API, у меня есть предложение по реализации, которое для меня хорошо сработало.

Поскольку python по-прежнему является самой надежной, удобной для разработчиков и полнофункциональной оболочкой для API Tensorflow, почему бы не создать привязку непосредственно к API-интерфейсу python, вместо того, чтобы пытаться «воссоздать» API-интерфейс python для js? Для этого по-прежнему потребуется сначала создать надстройку узла C ++, но вместо того, чтобы напрямую связываться с C API, вы можете использовать «встроенный» python для запуска методов python непосредственно из C ++.

Это не похоже на другие решения JS => Python, которые предлагают просто создать скрипт python ... решение не жизнеспособно для любых проблем обучения разумного размера из-за значительных затрат (времени) на передачу данных между процессами. Однако со встроенным python память, к которой обращаются ваши массивы python script / numpy, напрямую указывает на ваши буферы js Float32Array.

Это решение работает очень хорошо для меня (хотя, по общему признанию, получение начального потока js => C ++ => python было своего рода болью). Поскольку у меня есть особые потребности, я не выполнял задачу привязки к каждому отдельному методу Python TensorFlow, а вместо этого просто передаю свои данные и гиперпараметры нескольким методам, которые строят большую часть графа. Полная индивидуальная привязка не была бы такой уж плохой с моей нынешней отправной точки.

Я приветствую любые мысли или предложения по вышеизложенному подходу. Спасибо.

@ djimoh5 Замечательные мысли о полнофункциональных API JavaScript для Python! С другой стороны, мы также могли бы реализовать реализацию RPC-сервера для API-интерфейсов Python TensorFlow с функцией самоанализа, чтобы клиенты JavaScript и других языков могли получить доступ к Python в реальном времени. (Я сделаю это, когда буду доступен, ага)

Но вот кое-что о том, зачем воссоздавать некоторые функции Python для JavaScript, потому что они написаны на JavaScript, они больше подходят для разработчиков JavaScript, и этим разработчикам легко изменить исходный код, чтобы проверить, возможно ли что-то другое, а не просто получать фиды из апстрима :)

+1

Меня также интересует API-интерфейс nodejs tensorflow, чтобы иметь возможность использовать его в потоках node-red, которые будут связывать графы тензорных потоков и могут быть другими типами узлов анализа данных. Я до сих пор мало что знаю о тензорном потоке. Возможно, это не подходящее место, чтобы спрашивать, но я хотел бы знать, почему другие разработчики ищут nodejs api / надстройку для tenorflow? Каковы были бы ваши варианты использования?

Ответ @khelkun довольно прост: предоставление зрелого пакета JavaScript, который позволяет легко взаимодействовать с Tensorflow, открывает множество новых возможностей. JavaScript работает на каждой мобильной платформе, всех основных настольных операционных системах и во всех браузерах, поэтому возможности безграничны.

Наибольшие преимущества наверняка принесут серверные приложения, работающие на node.js, которые могут напрямую взаимодействовать с Tensorflow, но также node-webkit (настольные приложения) потенциально может породить десятки интересных проектов.

Неужели организаторы сообщества / администратор этой ветки не могут просто удалить сообщения тех людей, которые намеренно троллит все «+1», возможно, даже забанят их?

Кто-нибудь, работающий над этой интеграцией, рассматривал возможность использования WebAssembly (wasm)? Вы знаете, что это потенциально наиболее элегантное решение этой проблемы. Я действительно мало знаю о внутреннем устройстве TensorFlow, но я считаю, что части TensorFlow на C ++ можно скомпилировать в wasm (проверьте поддерживаемые функции MVP, но Unreal Engine 4 был скомпилирован для предшественника wasm и успешно работал в FireFox). После того, как C / C ++ API скомпилирован в wasm, вам просто нужно обеспечить доступ к необходимому API. wasm будет работать в Node.js, во всех основных браузерах и даже вне любого из них, поскольку он задуман как чрезвычайно переносимый байт-код. Мне кажется, это лучший путь вперед.

Связанные ресурсы / обсуждение:

+1 ... мы больше не живем в средневековой эпохе информационного века. Пожалуйста, поддержите node.js.

Зачем кому-то нужна еще одна библиотека Javascript? Зачем кому-то использовать JS-библиотеку для обучения NN? Javascropt - плохо продуманный язык.

@AyalaSaenzJorge lol (раз уж вы троллите, почему бы мне этого не сделать) ... Как насчет того, чтобы мы ЛЮБИЛИ "плохо" спроектированные языки? Javascript является наиболее распространенным языком, существующим в настоящее время .. больше кода (на земле) написано на javascript, чем ЛЮБОЙ другой язык высокого уровня .. И это ФАКТ, и он никогда не исчезнет, ​​извините, лол

Для тех из вас, кто более серьезен, чем этот тролль Checkout, https://deeplearnjs.org ... На него влияет тензорный поток и поддерживается Google ... Может быть, вместо того, чтобы начинать с нуля, мы могли бы подумать о переносе этого на Node.js.

@somombo да, это действительно интересно выглядит. RE: tensorflow + deeplearnjs, см. Особенно:

@AyalaSaenzJorge, это место для информативных комментариев, а не для самоуверенных поджигателей.
@somombo, пожалуйста, посмотрите мой комментарий от 26 августа, где я объясняю, почему deeplearnjs не имеет отношения к этой дискуссии.

Хорошо, извините за комментарий.

El dic. 12, 2017 18:46, "Филип Дабровски" [email protected]
написать:

@AyalaSaenzJorge https://github.com/ayalasaenzjorge это место для
информативные комментарии, а не самоуверенные поджигатели.
@somombo https://github.com/somombo, пожалуйста, посмотрите мой комментарий от 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. Подумал, что поделюсь, так как ряд людей проявили интерес к этому вопросу.

Я создал форк headless-gl, который работает с deeplearnjs (который, в свою очередь, работает с tenorflow) - это позволяет запускать модели на GPU из node.js (обратите внимание, что пока он был протестирован только на 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 ;-(

Также посмотрите мой комментарий от 26 августа, где я объясняю, почему deeplearnjs не имеет отношения к этой дискуссии.

@nikhilk потрясающе, продолжай! Я обязательно буду следить за вашим проектом ;-D

+1

propelml.org - Выглядит интересно. Я не использовал его, но его графический процессор включен и работает как в браузере, так и на узле

@ 7ammer propelml.org выглядит многообещающе. Спасибо, что поделились этим с нами ;-)

Потому что NodeJS это быстро! ; D

Если амбициозный член сообщества хочет славы решения этой проблемы и ее объединения с кодовой базой TensorFlow contrib, вот несколько советов, как я бы это сделал. Обратите внимание, я не собираюсь этого делать.

Вы можете добавить Node в workspace.bzl так же, как TensorBoard в js.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 (даже если бы он должен был состоять из 30 000 строк, как tex.web ) с нулевыми зависимостями, кроме стандартной библиотеки Node. Входными данными для этой программы будут pbtxt в взаимодействует с Node 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 и бац, у вас есть проект NodeJS, собранный и готовый к распространению в такие места, как NPM.

Если бы я написал это (чего я не буду), это будет простое прямое сопоставление определений TensorFlow API. Тогда я бы посоветовал нашим друзьям в сообществе облицевать библиотеку. Существует множество взглядов на дружественные современные высокоуровневые идиоматические JS и ML API, каждый из которых обслуживает разные варианты использования. Однако все они могли иметь общую привязку.

Обратите внимание, что есть примеры, когда мы уже создаем языковые привязки. См. Tenorflow / go / genop / main.go и tensorflow / go / op / generate.go для вдохновения.

Похоже, команда TensorFlow делает это сейчас главным приоритетом: https://js.tensorflow.org/faq/

Мы могли бы перенести это обсуждение сюда: https://github.com/tensorflow/tfjs/issues/36

По этой проблеме будет отслеживаться прогресс привязки Node.js к C API.

В качестве обновления этой проблемы - мы открыли исходный код привязки Node.js для TFJS: https://github.com/tensorflow/tfjs-node

Мы упорно работаем над правильной сборкой NPM и скоро выпустим ее!

Я закрою этот выпуск. Следите за тензорным потоком / tfjs и тензорным потоком / tfjs-node для дальнейших обновлений.

Связано и, возможно, интересно: мне удалось запустить TF в браузере через Webassembly. См. Https://humantoanimal.com для демонстрации; Я предоставлю более подробную информацию в будущем.

@nuchi , а вы скомпилировали необходимый код TensorFlow из C API в WebAssembly? Или вы используете TensorFlow.js?

@lastmjs Я объясню более подробно в предоставленной мной ссылке. Краткая версия: я добавил Webassembly в качестве цели компиляции XLA. Я никак не использовал Tensorflow.js.

@nuchi Отличная работа! и я знаю еще одно исследование WebAssemble о TensorFlow здесь:
https://medium.com/@tomasreimers/compiling -tensorflow-for-the-browser-f3387b8e1e1c

Рад видеть, что в этом есть официальный прогресс. Мне бы хотелось, чтобы у меня под рукой были быстрые параллельные вычисления на графическом процессоре с легкостью и компоновкой JS.

Я начал работать над привязкой NodeJS для TensorFlow некоторое время назад, но в последнее время у меня не было много свободного времени для этого.

Эта концепция аналогична подходу , предложенному

У меня были три цели для проекта:

1. Не требует сборки или установки tenorflow.

Вместо этого он должен загружать и использовать предварительно созданные, многоплатформенные двоичные файлы Python и загружать все необходимые исходные файлы на лету.

2. Не требуется полное воспроизведение C ++ или JS или абстракция API.

Вместо этого он должен предоставлять полный интерфейс 1 к 1 с C API, максимально предоставляя удобные абстракции JS .

3. Не эксплуатируйте C API привязок от руки

Вместо этого он должен использовать сценарий swig для сопоставления основных структур данных между Tensorflow / stdc ++ / V8 / node, а остальные последуют.


Я довольно далеко продвинулся в этом, но последнее, что я помню, были проблемы с ошибками, связанными с TF_Session.

Сейчас он просто пылится, поэтому, если кто-то захочет вмешаться и помочь с этим, я с радостью приму пиар.

Закрытие, когда это решено

Была ли эта страница полезной?
0 / 5 - 0 рейтинги