Tensorflow: Node.js(JavaScript) ๋ž˜ํผ API

์— ๋งŒ๋“  2015๋…„ 11์›” 09์ผ  ยท  246์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: tensorflow/tensorflow

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ต‰์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—

contributions welcome

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

+1!

๋ชจ๋“  246 ๋Œ“๊ธ€

+1!

+1

:+1:

+1

๋‚ด๊ฐ€ ์ฐพ๋˜ ๋ฐ”๋กœ ๊ทธ ๊ฒƒ. :+1:

๊ณต์‹ ์›น์‚ฌ์ดํŠธ http://www.tensorflow.org/ ์—์„œ ์ธ์šฉ

Go, Java, Lua, Javascript ๋˜๋Š” R๊ณผ ๊ฐ™์ด ์„ ํ˜ธํ•˜๋Š” ์–ธ์–ด์— SWIG ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚˜๋Š”์ด ๋ชจ๋“  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 ์ €๋„ ๊ด€์‹ฌ ์žˆ๋Š” ๋ถ„๋“ค์ด

@tngan slack ์ฑ„๋„์€ ๋น„๊ณต๊ฐœ์ด์ง€๋งŒ herokuapp ๋งํฌ๋กœ ๊ฐ€์ž…ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. :+1:

๋” ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ํ† ๋ก ํ•˜๊ณ  ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด์ œ nodejs๋ผ๋Š” ์Šฌ๋ž™ ์ฑ„๋„์ด ์žˆ๊ณ (#31 ์ฐธ์กฐ) Github ์ €์žฅ์†Œ node-tensorflow ๊ฐ€ ์˜ˆ์•ฝ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. @Foorack ๋‹˜ ๊ฐ์‚ฌ

๊ธฐ๊บผ์ด ๊ธฐ์—ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

@miguelalche ๊ด€์‹ฌ์„

(ํŠนํžˆ #132์™€ ํ•จ๊ป˜) ๊ธฐ์—ฌ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค!!

+1

๋…ธ๋“œ ๋งŒ์„ธ! ํ•ด๋ณด์ž

+1

+1

๋‹ค์Œ์€ C API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ TensorFlow ๊ทธ๋ž˜ํ”„๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. 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๋ฅผ ๊ตฌ์ถ•ํ•  ์˜ˆ์ •์ž…๋‹ˆ๊นŒ? ๊ทธ๊ฒŒ ๋‚ด ๋‹ค์Œ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

@nikhilk ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ญ”๊ฐ€ new tf.Tensor() ๋Œ€์‹  tf.NewTensor() ๋ฉ‹์ง„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚˜๋Š” ์ˆœ๊ฐ„์— ๊ทธ๊ฒƒ์„ ํ™•์žฅ์„ ๊ณ„ํšํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ์ €๋Š” ํŒŒ์ด์ฌ์œผ๋กœ ๋งŒ๋“  ๊ทธ๋ž˜ํ”„๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฐ๋งŒ ๊ด€์‹ฌ์ด ์žˆ๊ณ  ๋ฏธ๋‹ˆ๋ฉ€๋ฆฌ์ฆ˜์„ ์ข‹์•„ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

+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://github.com/node-tensorflow/node-tensorflow/ ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šฌ๋ž™ ์ฑ„๋„์— ๊ฐ€์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 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์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด ๊ณต๋™ ์ž‘์—…์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์–‘์˜ python SWIG ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์‚ฌ์šฉ์ž ์ง€์ • ์žฌ์ •์˜ ๋“ฑ์ด๊ณ  ๊ทธ๋“ค์˜ ์ž‘์—…์„ ์žฌํ˜„ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ tensorflow ํŒ€์—์„œ ๋กœ๋“œ๋งต์— ๋งŽ์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜๊ณ  ์ถฉ๋Œํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์— ์–ด๋–ค API๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ์ข‹์€์ง€์— ๋Œ€ํ•ด tensorflow ํŒ€์œผ๋กœ๋ถ€ํ„ฐ ๋ช…ํ™•์„ฑ์„ ์–ป๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. (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๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํ™•์žฅ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์œ ์šฉํ•œ ๋น„ํŠธ๋Š” ๊ธฐ์กด ๊ทธ๋ž˜ํ”„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด ๋  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. C++ ๊ทธ๋ž˜ํ”„ ๋นŒ๋“œ API๋Š” ํ˜„์žฌ ๋‹ค์‹œ ์ž‘์„ฑ ์ค‘์ด๋ฏ€๋กœ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๋Š” ๊ฒƒ์€ ํŠนํžˆ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐ”์ธ๋”ฉ์„ contrib/nodejs์— ๋„ฃ์„ PR์„ ์ค€๋น„ํ–ˆ๋‹ค๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

@martinwick ๊ฒฉ๋ คํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ๊ธฐ์— ์ดˆ๊ธฐ ์ฐŒ๋ฅด๊ธฐ๋ฅผ ํ–ˆ๋‹ค: https://github.com/tensorflow/tensorflow/pull/2206 - ์ด๊ฒƒ์€ ๋‹จ์ง€ ๋ฒ„์ „ ๋ฌธ์ž์—ด์„ nodejs๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฐœ๋… ์ฆ๋ช…์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„ ์‹คํ–‰ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ swig ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

+10000

+1

+1

+1

+1

+1

+1

์ด๊ฒƒ์€ ์›น ํด๋ผ์ด์–ธํŠธ์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ˆœ์ˆ˜ํ•œ ํ”„๋ก ํŠธ ์—”๋“œ ๊ทธ๋ž˜ํ”„ ๋‚ด๋ณด๋‚ด๊ธฐ์— ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„์—์„œ ์š”์ฒญํ•œ ์›ํ•˜๋Š” ์ž…๋ ฅ/์ถœ๋ ฅ์ด ๋‚ด๋ณด๋‚ธ 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์‹œ 6๋ถ„์— "willshion" [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

+1์ดˆ

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธ
https://github.com/tensorflow/tensorflow/issues/37#issuecomment -257222936,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ANrvwrbmShC9c0_wsNpTudKSCb0-8qt8ks5q5Yx3gaJpZM4Ge5NV
.

TensorFlow 1์ฃผ๋…„ ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค!

https://research.googleblog.com/2016/11/celebating-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 pweettyyy pwease!!!

+1

+1

๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค. ๐Ÿ‘

+1

๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค. :+1:

๐Ÿ‘

+1

+1. ๋‚˜๋Š” Node์—์„œ ์•ฝ๊ฐ„์˜ ๊ฒฝํ—˜์ด ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์„ ์‚ดํŽด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

+1

+1 ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Python์€ ํ›Œ๋ฅญํ•˜๊ณ  Node ๋ฐ JS๋„ ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค.

+1

๋‹จ์ง€ ๊ทธ๊ฒƒ์„ ์œ„ํ•ด +1

+1!

+1

image

+1 ๐Ÿ‘

+1

+1์€ ๋ฉ‹์ง„ af๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค

+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๋…„์ด๋ฉฐ ํ”„๋กœ์ ํŠธ์˜ ์–ด๋Š ๋ˆ„๊ตฌ๋„ ์‹ค์ œ๋กœ ์„ ํƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ํžŒํŠธ๋ฅผ ์–ป์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

tensorflow์™€ node์— ๊ด€ํ•œ ๊ฑด์ „ํ•œ ํ† ๋ก ์ด ์žˆ์—ˆ๋Š”์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด +1์€ ๋ณ„๋กœ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค :(

+1

# +1

๐Ÿ‘

+1

+1

:+1:

2๋…„์ด ์ง€๋‚ฌ๋Š”๋ฐ ์•„์ง๋„ ์šด์ด ์—†์Šต๋‹ˆ๊นŒ?

์ข‹์€. ์”จ๋ฐœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ.

+1.0/0.0

์‹œ๋ƒ…ํ‹ฑ ์‚ฌ์šฉ https://github.com/cazala/synaptic

deep_recommend_system ์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ ์ด์ œ tensorflow ์ œ๊ณต์„ ํ†ตํ•ด Node.js๋กœ ๋ชจ๋ธ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„์ง ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

https://github.com/tngan/tensornode

์ด๊ฒƒ์€ ์œ ์šฉํ•œ keras-js ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@sarkistlt ๋ถˆํ–‰ํžˆ๋„, ์šฐ๋ฆฌ๋Š” keras.js ๊ฐ€ ํ•˜๋Š” Tensorflow์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ตฌํ˜„์„ ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Tensorflow์˜ C++ API ์ฃผ์œ„์— nodejs ๋ž˜ํผ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋„ค์ดํ‹ฐ๋ธŒ ์ถ”๊ฐ€ ๋ฅผ - NodeJ์˜ ๊ฒฝ์šฐ .
๊ธฐํƒ€ ์œ ์šฉํ•œ ์†Œ์Šค .
๋ถˆํ–‰ํžˆ๋„ ์ œ ์ง์—…์€ ์ฝ”๋”ฉ์ด ์•„๋‹ˆ๋ฉฐ ๊ฐœ์ธ์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ C++์— ๋Œ€ํ•œ ๋Šฅ์ˆ™๋„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ keras.js ๋Š” ์ถ”๋ก ๋งŒ ํ•˜๊ณ  ํ›ˆ๋ จ์€ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์—ญ์ „ํŒŒ๋Š” ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Google ๊ฐœ๋ฐœ์ž๋Š” ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ ์—์„œ Tensorflow์˜ ์ž‘์€ ๋ถ€๋ถ„์„ Javascript๋กœ ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ ์‹ ๊ฒฝ๋ง ๊ตฌํ˜„์€ ์—ฌ๊ธฐ์— ์žˆ์œผ๋ฉฐ ์—ญ์ „ํŒŒ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ nodejs Tensorflow ๊ตฌํ˜„์— ๋Œ€ํ•œ ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ฐธ์—ฌํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
https://github.com/nodejs-tensorflow/nodejs-tensorflow

+1

+1

+1

+1

@JIoJIaJIu์—๊ฒŒ ๊ธฐํšŒ๋ฅผ ์ฃผ์…”์„œ ์ •๋ง ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฐ€๋Šฅ์„ฑ์€ ๋งค์šฐ ํฝ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋งŽ์ด ์ฐฌ์„ฑํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์–ผํ• ๋ณด๊ธฐ์— ์ง€๊ธˆ๊นŒ์ง€๋Š” ์˜ณ์€ ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•ž์„œ @martinwicke์ด ๊ถŒ์žฅํ•œ ๋Œ€๋กœ ๋ณ„๋„์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์ƒ์„ฑํ–ˆ์œผ๋ฉฐ TensorFlow C API๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌ์ž๋ฅผ ๋Œ์–ด๋“ค์ด๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ Vincent๊ฐ€ ๋ช‡ ๋…„ ์ „์— ๊ถŒ์žฅ ํ•œ ๋Œ€๋กœ 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

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” https://github.com/yorkie/tensorflow-nodejs์—์„œ Tensorflow์šฉ Node.js ๋ธŒ๋ฆฌ์ง• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. SWIG ์—†์ด "์‚ฌ์ „ ์ •์˜๋œ ๊ทธ๋ž˜ํ”„ ์‹คํ–‰"๊ณผ ๋งค์šฐ ๊ฐ„๋‹จํ•œ "๊ทธ๋ž˜ํ”„ ๊ตฌ์„ฑ"์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์•ž์œผ๋กœ ๋” ๋งŽ์€ ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. :)

๋™์‹œ์— Tensorflow ๊ณต์‹ ๊ทธ๋ฃน์—์„œ ์ด๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ฒŒ ๋˜์–ด ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ €์—๊ฒŒ ๋น„์šฉ์ด ์ „ํ˜€ ๋“ค์ง€ ์•Š๋Š” PR์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

@yorkie ์žฌ๋ฐŒ์–ด๋ณด์ด๋„ค์š” ํ•ด๋ด์•ผ๊ฒ ๋„ค์š” ! ๊ทธ๋Ÿฌ๋‚˜ GPL ์ฝ”๋“œ๋ฅผ TensorFlow์— ๋ณ‘ํ•ฉํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

@yorkie ๋ฉ‹์ง€๋„ค์š” . ํ”„๋กœ์ ํŠธ ์— ์ฐธ์—ฌํ•˜๊ณ  ํž˜์„ ํ•ฉ์น˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@ry ํ™•์‹คํžˆ ๋ผ์ด์„ ์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค :)
@JIoJIaJIu ์ง€๊ธˆ ์ด ์ €์žฅ์†Œ๋ฅผ ์ด๋™ํ•˜๊ธฐ์— ๊ฐ€์žฅ ์ข‹์€ ์žฅ์†Œ๊ฐ€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์ €์žฅ์†Œ๊ฐ€ tensorflow org๋ฅผ ์ด๋™ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๋ฉด nodejs-tensorflow๊ฐ€ ์ข‹์€ ๊ณณ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. :)

๊ทธ๋Ÿฌ๋‚˜ GPL ์ฝ”๋“œ๋ฅผ TensorFlow์— ๋ณ‘ํ•ฉํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

@ry ๋ผ์ด์„ ์Šค๋ฅผ MIT๋กœ ์—…๋ฐ์ดํŠธํ–ˆ๊ณ  @JIoJIaJIu ๊ฐ€ ๊ทธ๋ฃน์— ํ•ฉ๋ฅ˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๋Œ€ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

+1

+1

+1

+1

+1

TensorFlow์šฉ JavaScript API๋Š” ์ด๋ฒˆ ๋‹ฌ ์ดˆ์— ๋ฐœํ‘œ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. deeplearn.js ํ™ˆํŽ˜์ด์ง€์—์„œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•˜์„ธ์š”.
์ด์ œ ์ด (๊ด‘๋ฒ”์œ„ํ•œ) ๋ฒ„๊ทธ๋ฅผ ๋‹ซ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ FR์„ ์ž์œ ๋กญ๊ฒŒ ์—ฌ์‹ญ์‹œ์˜ค.

deeplearn.js ๋Š” node.js์šฉ SDK๊ฐ€ ์•„๋‹ˆ๋ผ webgl์ด ์žˆ๋Š” ๋ธŒ๋ผ์šฐ์ €์šฉ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿด ์ˆ˜ ์žˆ์ง€. ์ด์ œ ๋ฒ„๊ทธ ์ œ๋ชฉ์ด Node.js๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

@vincentvanhoucke ์ œ๋ชฉ์—์„œ node.js์— ๋Œ€ํ•œ ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค. "deeplearn.js" ๋ฐ "Tensorflow API for Javascript"์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ๊ณผ์™€ ๋ฐฐ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์šฐ์„  - deeplearn.js๋Š” "TensorFlow API ์Šคํƒ€์ผ"์„ ์–ด๋Š ์ •๋„ ๋ฐ˜์˜ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์ „์ฒด Tensorflow ์žฅ์ ์— ๋Œ€ํ•œ ์ง์ ‘์ ์ธ API์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Tensorflow์˜ ๋Œ€์•ˆ์ด๋ผ๊ณ  ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๊ฐ€๊น์ง€ ์•Š์Šต๋‹ˆ๋‹ค... ์•„๋งˆ๋„ ์ทจ๋ฏธ๋กœ ํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์ง€๋งŒ ์ปดํ“จํŒ… ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ธฐ๊ณ„ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ์ƒ์—…์  ์šฉ๋„๋Š” ์•„๋‹™๋‹ˆ๋‹ค. JavaScript์™€ ์‹ ๊ฒฝ๋ง์œผ๋กœ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋ฐ๋ชจ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค... ์•ž์œผ๋กœ ๋‚˜์˜ฌ ๊ฒƒ๋“ค์˜ ๋ง›... ;-)

+1

+999

๋ง™์†Œ์‚ฌ ์“ธ๋ฐ์—†๋Š” ์•Œ๋ฆผ ๊ทธ๋งŒ ๋ณด๋‚ด๋ผ ๊นƒํ—ˆ๋ธŒ๊ฐ€ ๐Ÿ‘ ์™€ ๐Ÿ‘Ž ๋ฐ˜์‘์„ ์†Œ๊ฐœํ•œ ์ด์œ ๊ฐ€ ์žˆ๋‹ค.

+1 ๋ฐ +999๋Š” ์‚ฌ๋žŒ๋“ค์„ ๊ท€์ฐฎ๊ฒŒ ํ•  ๋ฟ ์•„๋ฌด๋Ÿฐ ๊ฐ€์น˜๋ฅผ ๋”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

+1000

:+1:

+1

+1

์ฃผ๋ชฉ

๐Ÿ˜„ ์—ฌ๋Ÿฌ๋ถ„ ๋Œ“๊ธ€ ์ „์— +1 or +๋ฌด์—‡์ด๋“  - @k1sul1 ์˜ ๋Œ“๊ธ€์„

๋ง™์†Œ์‚ฌ ์“ธ๋ฐ์—†๋Š” ์•Œ๋ฆผ ๊ทธ๋งŒ ๋ณด๋‚ด๋ผ ๊นƒํ—ˆ๋ธŒ๊ฐ€ ๐Ÿ‘ ์™€ ๐Ÿ‘Ž ๋ฐ˜์‘์„ ์†Œ๊ฐœํ•œ ์ด์œ ๊ฐ€ ์žˆ๋‹ค. +1 ๋ฐ +999๋Š” ์‚ฌ๋žŒ๋“ค์„ ๊ท€์ฐฎ๊ฒŒ ํ•  ๋ฟ ์•„๋ฌด๋Ÿฐ ๊ฐ€์น˜๋ฅผ ๋”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@shahen94 ์šฐ๋ฆฌ ๋ชจ๋‘ ๋ณด์•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ... ์šฐ๋ฆฌ๋Š” js ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

+1

@BruceHem js ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด ํ”ผ๋“œ์— ๋ถˆํ•„์š”ํ•œ ์ŠคํŒธ์„ ๋งน๋ชฉ์ ์œผ๋กœ ํ‘ธ์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ์–ด๋–ค ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค... ๐Ÿ˜„

"+1"์ด ์ด ์ฃผ์ œ๋ฅผ ์ฝ์„ ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ชจ๋‘ ์•Œ๊ณ  ๊ณ„์‹ญ๋‹ˆ๊นŒ? ๋‚˜๋Š” ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์ด ์‚ฌ๋ก€๋ฅผ ์ง€์ง€ํ•˜๊ณ  ์‹ถ์–ดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ "ํˆฌํ‘œ" ๊ธฐ๋Šฅ์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด github์˜ ๊ธฐ๋Šฅ์€ ์Šค๋ ˆ๋“œ์˜ ๋Œ“๊ธ€ ์ˆ˜๊ฐ€ ์•„๋‹Œ "๋ฐ˜์‘"์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค๋Š” ์ ๋งŒ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค... ์•„๋‹ˆ๋ฉด ์ œ๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ;-NS

Lol :P ์ด ์Šค๋ ˆ๋“œ๋Š” ๋ช‡ ๋…„ ์ „์— ์ฃฝ์—ˆ์Šต๋‹ˆ๋‹ค.
.
+1 ๊ตฌ๊ณจํ”Œ๋ ‰์Šค!

+1

@thefill์— ์ ˆ๋Œ€์ ์œผ๋กœ "+1" ๋™์˜ํ•˜๋ฉด ์ด ์ฃผ์ œ๋ฅผ ์ฝ์„ ์ˆ˜

์ €๋Š” https://github.com/yorkie/tensorflow-nodejs ์—์„œ Python๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ถฉ๋ถ„ํžˆ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์—…ํ•˜๊ณ  ์žˆ์—ˆ๊ณ  ์•„์ง ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ณต์‹ language_bindings API์— ๋Œ€ํ•œ ์ „์ฒด ๊ตฌํ˜„์ด

๋‚˜๋Š” ๋˜ํ•œ ๋‚ด ๊ฐœ์ธ ์ €์žฅ์†Œ๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ์ง€์›๋˜๋„๋ก @ry ์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ œ ๋ชจ๋ธ, ํŠนํžˆ RNN ์‚ฌ๋ก€๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ํ•ด์•ผ ํ•  ์ผ์ด ๊ฑฐ์˜ ์—†์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ ๋‹ค๋ฅธ ๋ถ„์•ผ์—์„œ ์ž‘์—…ํ•ด์•ผ ํ•˜๊ณ  ์ด ๋ช‡ ๊ฐœ์›” ๋™์•ˆ ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋Ÿฌํ•œ ์ผ์ด ์ผ์–ด๋‚˜๋„๋ก ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์ €์—๊ฒŒ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค. ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋„์›€์ด ๋˜๋Š” ์ผ์„ ํ•ฉ์‹œ๋‹ค :)

ํ˜„์žฌ ์‹œ์ž‘๋œ ํ”„๋กœ์ ํŠธ, ํŠนํžˆ C API ์ž‘์—…์˜ ์–ด๋ ค์›€๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ €์—๊ฒŒ ์ž˜ ๋งž๋Š” ๊ตฌํ˜„์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

python์€ js์šฉ python API๋ฅผ "์žฌ์ž‘์„ฑ"ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๋Œ€์‹  Tensorflow API ์ฃผ๋ณ€์—์„œ ์—ฌ์ „ํžˆ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•˜๊ณ  ๊ฐœ๋ฐœ์ž ์นœํ™”์ ์ด๋ฉฐ ์™„์ „ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ๋ž˜ํผ์ด๋ฏ€๋กœ python API์— ์ง์ ‘ ๋ฐ”์ธ๋”ฉ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋จผ์ € ๋…ธ๋“œ C++ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด์•ผ ํ•˜์ง€๋งŒ C API์— ์ง์ ‘ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๋Œ€์‹  "ํฌํ•จ๋œ" ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ C++์—์„œ ์ง์ ‘ ํŒŒ์ด์ฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹จ์ˆœํžˆ python ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ์„ ์ œ์•ˆํ•˜๋Š” ๋‹ค๋ฅธ JS => Python ์†”๋ฃจ์…˜๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค...ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ๊ด‘๋ฒ”์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก ๋น„์šฉ(์‹œ๊ฐ„) ๋•Œ๋ฌธ์— ํ•ฉ๋ฆฌ์ ์ธ ํฌ๊ธฐ์˜ ํ•™์Šต ๋ฌธ์ œ์— ๋Œ€ํ•ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž„๋ฒ ๋””๋“œ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ/numpy ๋ฐฐ์—ด์—์„œ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ js Float32Array ๋ฒ„ํผ๋ฅผ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์€ ์ €์—๊ฒŒ ๋งค์šฐ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๋ฌผ๋ก  ์ดˆ๊ธฐ js => C++ => python ํ๋ฆ„์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์€ ์ผ์ข…์˜ ๊ณ ํ†ต์ด์—ˆ์Šต๋‹ˆ๋‹ค). ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐ ๊ฐœ๋ณ„ Python TensorFlow ๋ฉ”์„œ๋“œ์— ๋ฐ”์ธ๋”ฉํ•˜๋Š” ์ž‘์—…์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋Œ€์‹  ๋Œ€๋ถ€๋ถ„์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ์— ๋ฐ์ดํ„ฐ์™€ ํ•˜์ดํผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๊ฐœ๋ณ„ ๋ฐ”์ธ๋”ฉ์€ ํ˜„์žฌ ์‹œ์ž‘์ ์—์„œ ๋„ˆ๋ฌด ๋‚˜์˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์œ„์— ์„ค๋ช…๋œ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋ชจ๋“  ์ƒ๊ฐ์ด๋‚˜ ์ œ์•ˆ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”.

@djimoh5 JavaScript์—์„œ Python ์ „์ฒด ๊ธฐ๋Šฅ API์— ๋Œ€ํ•œ ๋ฉ‹์ง„ ์ƒ๊ฐ! ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ, JavaScript ๋ฐ ๊ธฐํƒ€ ์–ธ์–ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹ค์‹œ๊ฐ„ Python์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž์ฒด ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” TensorFlow Python API์šฉ RPC ์„œ๋ฒ„ ๊ตฌํ˜„์„ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. (์‹œ๊ฐ„์ด ๋˜๋ฉด ํ• ๊ฒŒ์š”, ์•„ํ•˜)

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์— JavaScript์šฉ ์ผ๋ถ€ Python ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ JavaScript๋กœ ์ž‘์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— JavaScript ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋” ์นœ์ˆ™ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋‹ค๋ฅธ ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์—…์ŠคํŠธ๋ฆผ์—์„œ ํ”ผ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. :)

+1

tensorflows ๊ทธ๋ž˜ํ”„๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋…ธ๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” node-red ํ๋ฆ„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” nodejs tensorflow API์—๋„ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ํ…์„œํ”Œ๋กœ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์งˆ๋ฌธํ•˜๊ธฐ์— ์ ์ ˆํ•œ ์žฅ์†Œ๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ tensorflow์šฉ nodejs API/์• ๋“œ์˜จ์„ ์ฐพ๋Š” ์ด์œ ๋ฅผ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@khelkun์˜ ๋Œ€๋‹ต์€ ๋‹ค์†Œ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ํฐ ์ด์ ์€ Tensorflow์™€ ์ง์ ‘ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” node.js์—์„œ ์ž‘๋™ํ•˜๋Š” ์„œ๋ฒ„ ์ธก ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ™•์‹คํžˆ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ node-webkit(๋ฐ์Šคํฌํ†ฑ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ)๋„ ์ž ์žฌ์ ์œผ๋กœ ์ˆ˜์‹ญ ๊ฐœ์˜ ํฅ๋ฏธ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฃผ์ตœ์ž/๊ด€๋ฆฌ์ž๋Š” ์˜๋„์ ์œผ๋กœ ๋ชจ๋“  "+1"์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐจ๋‹จํ•˜๊ฑฐ๋‚˜ ์ฐจ๋‹จํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ๊ฒŒ์‹œ๋ฌผ์„ ๋‹จ์ˆœํžˆ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ? Lol

์ด ํ†ตํ•ฉ ์ž‘์—…์„ ํ•˜๋Š” ์‚ฌ๋žŒ์ด WebAssembly(wasm) ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์ž ์žฌ์ ์œผ๋กœ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฐ€์žฅ ์šฐ์•„ํ•œ ์†”๋ฃจ์…˜์ด๋ฉฐ Python๊ณผ C++๋กœ ๋Œ€ํ™”ํ•˜๋Š” ๋ชจ๋“  JS๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” TensorFlow์˜ ๋‚ด๋ถ€์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด์ง€๋งŒ TensorFlow์˜ C++ ๋ถ€๋ถ„์„ wasm์œผ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์ง€์›๋˜๋Š” MVP ๊ธฐ๋Šฅ์„ ํ™•์ธํ•˜์ง€๋งŒ Unreal Engine 4๋Š” wasm์˜ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ์ปดํŒŒ์ผ๋˜์—ˆ๊ณ  FireFox์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค). C/C++ API๊ฐ€ wasm์œผ๋กœ ์ปดํŒŒ์ผ๋˜๋ฉด ํ•„์š”ํ•œ API๊ฐ€ ๋…ธ์ถœ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. wasm์€ Node.js, ๋ชจ๋“  ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €, ์‹ฌ์ง€์–ด ๊ทธ ์™ธ๋ถ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด๊ฒƒ์€ ๋งค์šฐ ์ด์‹์„ฑ์ด ๋†’์€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚˜์—๊ฒŒ ๊ฐ€์žฅ ์ข‹์€ ๊ธธ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

๊ด€๋ จ ๋ฆฌ์†Œ์Šค/ํ† ๋ก :

+1... ์šฐ๋ฆฌ๋Š” ๋” ์ด์ƒ ์ •๋ณดํ™” ์‹œ๋Œ€์˜ ์ค‘์„ธ ์‹œ๋Œ€์— ์‚ด๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. node.js๋ฅผ ์ง€์›ํ•ด์ฃผ์„ธ์š”.

๋‹ค๋ฅธ Javascript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์™œ ์•„๋ฌด๋„ NN์„ ํ›ˆ๋ จํ•˜๊ธฐ ์œ„ํ•ด JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ• ๊นŒ์š”? Javascopt๋Š” ์ž˜๋ชป๋œ ์„ค๊ณ„ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

@AyalaSaenzJorge lol (์™œ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€์ง€ ํŠธ๋กค๋งํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—) ... "๋‚˜์œ"์„ค๊ณ„ ์–ธ์–ด๋ฅผ ์‚ฌ๋ž‘ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? Javascript๋Š” ํ˜„์žฌ ์กด์žฌํ•˜๋Š” ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ณ ๊ธ‰ ์–ธ์–ด๋ณด๋‹ค ๋” ๋งŽ์€ ์ฝ”๋“œ(์ง€๊ตฌ์ƒ)๊ฐ€ JavaScript๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์‚ฌ์‹ค์ด๋ฉฐ ์ ˆ๋Œ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค ๋กค

์ด ํŠธ๋กค๋ณด๋‹ค ๋” ์ง„์ง€ํ•œ ๋ถ„๋“ค์„ ์œ„ํ•ด https://deeplearnjs.org๋ฅผ ํ™•์ธํ•˜์„ธ์š” ... tensorflow์˜ ์˜ํ–ฅ์„ ๋ฐ›๊ณ  Google์˜ ์ง€์›์„ ๋ฐ›์Šต๋‹ˆ๋‹ค... ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค Node.js๋กœ ์ด์‹ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@somombo ๋„ค, ์ •๋ง ์žฌ๋ฏธ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. RE: tensorflow + deeplearnjs, esp ์ฐธ์กฐ:

@AyalaSaenzJorge ์ด๊ฒƒ์€
@somombo๋Š” 8์›” 26์ผ์— ๋‚ด๊ฐ€ ์™œ deeplearnjs๊ฐ€ ์ด ํ† ๋ก ๊ณผ ๊ด€๋ จ์ด ์—†๋Š”์ง€ ์„ค๋ช…ํ•˜๋Š” ๋‚ด ๋Œ“๊ธ€์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ข‹์•„์š” ๋Œ“๊ธ€ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

์—˜ ๋”•. 2017๋…„ 12์›” 12์ผ ์˜คํ›„ 6์‹œ 46๋ถ„, "ํ•„๋ฆฝ ๋‹ค๋ธŒ๋กœ์Šคํ‚ค" ์•Œ๋ฆผ @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 ์™€ node.js์˜ ์˜ˆ์ธก/์ถ”๋ก ์„ ์œ„ํ•ด TensorFlow ๊ทธ๋ž˜ํ”„(๋ฐ ๋‚˜์ค‘์— ์ €์žฅ๋œ ๋ชจ๋ธ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ง€์›์„ ์ œ๊ณตํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด ๋ฌธ์ œ์— ๊ด€์‹ฌ์„ ํ‘œ๋ช…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์œ ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” 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๋ฅผ ๋ฏธ๋Ÿฌ๋งํ•˜๋Š” ์‹คํ–‰ ๋ชจ๋ธ"์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ deeplearnjs๊ฐ€ ์ด ํ† ๋ก ๊ณผ ๊ด€๋ จ์ด ์—†๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๋Š” 8์›” 26์ผ์˜ ๋‚ด ์˜๊ฒฌ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@nikhilk ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๊ณ„์†ํ•˜์‹ญ์‹œ์˜ค! ๋‚˜๋Š” ๋‹น์‹ ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ํ™•์‹คํžˆ ์ง€์ผœ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค ;-D

+1

propelml.org - ํฅ๋ฏธ๋กญ๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์ง€๋งŒ GPU๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ๋ธŒ๋ผ์šฐ์ €์™€ ๋…ธ๋“œ ๋ชจ๋‘์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

@7ammer propelml.org๋Š” ๋‹ค์†Œ ์œ ๋งํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ๊ณต์œ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ;-)

NodeJS๊ฐ€ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค! ;NS

์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์•ผ์‹ฌ์ฐฌ ๊ตฌ์„ฑ์›์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  TensorFlow contrib ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋ณ‘ํ•ฉํ•˜๋Š” ์˜๊ด‘์„ ์›ํ•  ๊ฒฝ์šฐ ๋‚ด๊ฐ€ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ํŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ์ ์„ ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

๋‹น์‹ ์€์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค 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__"],
)

์ด์ œ bazel run //tensorflow/contrib/node:generate ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ ํ”„๋กœ๊ทธ๋žจ(์˜ˆ: tsc.js )์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 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"],
  )

์ด์ œ ์žฌ๋ฏธ์žˆ๋Š” ๋ถ€๋ถ„์„ ์œ„ํ•ด. Node ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์™ธ์˜ ์ข…์†์„ฑ์ด ์ „ํ˜€ ์—†๋Š” ๋‹จ์ผ .js ํŒŒ์ผ( tex.web ๊ณผ ๊ฐ™์ด 30,000์ค„์ด ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„)์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ๊ทธ๋žจ์˜ ์ž…๋ ฅ์€ ops.pbtxt ๋ฐ api_def/base_api ์˜ ๋‹ค๋ฅธ ๋ชจ๋“  pbtxt ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ๊ทธ๋žจ์˜ ์ถœ๋ ฅ์€ ์ด ์˜ˆ์ œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” TensorFlow C API ๋ฐ Node C++ Addon API ์™€ ํ†ต์‹ ํ•˜๋Š” ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ C++ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

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์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ๋น„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ ๋ชจ๋‘ ์ด ๋ฐ”์ธ๋”ฉ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ์–ธ์–ด ๋ฐ”์ธ๋”ฉ์„ ์ƒ์„ฑํ•œ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜๊ฐ์„ ์–ป์œผ ๋ ค๋ฉด tensorflow/go/genop/main.go ๋ฐ tensorflow/go/op/generate.go ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

TensorFlow ํŒ€์ด ์ง€๊ธˆ ์ด๊ฒƒ์„ ์ตœ์šฐ์„  ๊ณผ์ œ๋กœ ์‚ผ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค: https://js.tensorflow.org/faq/

์ด ํ† ๋ก ์„ ์—ฌ๊ธฐ๋กœ ์˜ฎ๊ธฐ๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/tensorflow/tfjs/issues/36

C API์— ๋Œ€ํ•œ Node.js ๋ฐ”์ธ๋”ฉ์˜ ์ง„ํ–‰ ์ƒํ™ฉ์€ ํ•ด๋‹น ๋ฌธ์ œ์—์„œ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋กœ - TFJS์— ๋Œ€ํ•œ Node.js ๋ฐ”์ธ๋”ฉ์„ ๊ณต๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/tensorflow/tfjs-node

์šฐ๋ฆฌ๋Š” ์ ์ ˆํ•œ NPM ๋นŒ๋“œ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์—ด์‹ฌํžˆ ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ณง ์ถœ์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด tensorflow/tfjs ๋ฐ tensorflow/tfjs-node๋ฅผ ์ถ”์ ํ•˜์„ธ์š”.

๊ด€๋ จ๋˜๊ณ  ๊ด€์‹ฌ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ: Webassembly๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ TF๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ๋ชจ๋Š” https://humantoanimal.com ์„ ์ฐธ์กฐ

@nuchi , C API์—์„œ WebAssembly๋กœ ํ•„์š”ํ•œ TensorFlow ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ–ˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด 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๋ฅผ ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋Œ€์‹ ํ•œ๋‹ค ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์ „ ๋‚ด์žฅ, ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ํŒŒ์ด์ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผํ•˜๊ณ  ์ฆ‰์‹œ ํ•„์š”ํ•œ ๋ชจ๋“  ์†Œ์Šค ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. API์˜ ์™„์ „ํ•œ C++ ๋˜๋Š” JS ์žฌ์ƒ ๋˜๋Š” ์ถ”์ƒํ™”๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ€์‹  C API์™€ ์™„์ „ํ•œ 1:1 ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณต ํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ํ•œ ์ œ๊ณต ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3. C API ๋ฐ”์ธ๋”ฉ ์„ ์†์œผ๋กœ ์œ ์ง€ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋Œ€์‹  swig ์Šคํฌ๋ฆฝํŠธ ๋ฅผ


๋‚˜๋Š” ์ด๊ฒƒ๊ณผ ๊ฝค ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์—ˆ์ง€๋งŒ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚˜๋Š” TF_Session ๊ด€๋ จ segfaults์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ ๋จผ์ง€๋งŒ ์Œ“์ด๋Š” ์ค‘์ด๋ฏ€๋กœ ๋ˆ„๊ตฐ๊ฐ€ ๋›ฐ์–ด๋“ค์–ด ์ด๋ฅผ ๋„์™€์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ๊ธฐ๊บผ์ด PR์„ ๋ฐ›๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ๋จ์— ๋”ฐ๋ผ ์ข…๋ฃŒ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰