Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScriptでも機械学習がやりたかった話
Search
yujiosaka
November 07, 2018
Programming
500
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaScriptでも機械学習がやりたかった話
yujiosaka
November 07, 2018
More Decks by yujiosaka
See All by yujiosaka
I was understanding WASM all wrong! 🤯
yujiosaka
2
350
Machine Learning with JavaScript
yujiosaka
0
230
ヘッドレスChromeでクローラを作った後の話
yujiosaka
3
750
俺が最初にヘッドレスChromeでクローラ作った 事になんねーかな
yujiosaka
4
1.4k
『XXX』のための管理画面
yujiosaka
1
1.5k
Enjoy Deep Learning by JavaScript
yujiosaka
1
400
ひたすら楽してディープラーニング
yujiosaka
20
13k
technology x business
yujiosaka
3
610
第二回もんご祭 パネルディスカッション
yujiosaka
0
940
Other Decks in Programming
See All in Programming
Android CLI
fornewid
0
240
My Marp Sample
sinoue0108
0
120
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
390
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
300
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
380
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
550
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
ALB ログから Trace を気合で繋げる技術
fohte
5
580
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
370
Flow は今どうなっているか
mizdra
PRO
0
720
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.1k
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
210
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
210
Technical Leadership for Architectural Decision Making
baasie
3
530
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.5k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
480
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
710
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Evolving SEO for Evolving Search Engines
ryanjones
0
260
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Speed Design
sergeychernyshev
33
2k
Transcript
Yuji Isobe JavaScriptͰ ػցֶश͕Γ͔ͨͬͨ Emotion Intelligence × GIGษڧձ
Ϛωʔδϟʔ ϝϯςφʔ @yujiosaka github.com/yujiosaka/headless-chrome-crawler
ձࣾ www.emin.co.jp
એᶃ www.zenclerk.com/
ϏδωεɾOSSϚΠϯυΛ࣋ͬͨΤϯδχΞืूʂ એᶄ www.wantedly.com/projects/233437
ຊ
1.JavaScriptͰػցֶशͲ͜·ͰͰ͖Δͷ͔ 2.JavaScriptΛ͏ϝϦοτͱσϝϦοτ 3.۩ମతͳ࣮ݱํ๏ͱσϞ ຊͷςʔϚ
ͦͦJavaScriptͰ ػցֶशͬͯ·ͱʹͰ͖Μͷʁ
JavaScriptͰσΟʔϓϥʔχϯά speakerdeck.com/yujiosaka/hitasurale-sitedeipuraningu github.com/yujiosaka/js-mind XXXSFEEJUDPNSOPEFDPNNFOUTEH KT@NJOE@EFFQ@MFBSOJOH@MJCSBSZ@XSJUUFO@JO@FT ͳΜͰJavaScriptͰ͜Μͳ͜ͱͨ͠Μͩʁ ͦΜͳͷStarཉ͠͞ʹܾ·ͬͯΔͰ͠ΐ
ਤ
࣌ͷΦν TQFBLFSEFDLDPNZVKJPTBLBIJUBTVSBMFTJUFEFJQVSBOJOHV TMJEF
࣌ͷΦν TQFBLFSEFDLDPNZVKJPTBLBIJUBTVSBMFTJUFEFJQVSBOJOHV TMJEF
A. օ͕ͬͯΔ͔Βศརʹͳ͍ͬͯ͘ Q. ͳͥσʔλαΠΤϯεPythonʁ trends.google.co.jp/trends/explore?date=today%205-y&geo=JP&q=JavaScript,Python,AI
NumPy/Pandas - ߴɾߴػೳͳߦྻܭࢉ Matplotlib/seaborn - ख͔ܰͭߴػೳͳάϥϑඳը Jupiter Notebook - ࢼߦࡨޡ͕Γ͍͢
scikit-learn - ڞ௨ͷػցֶशAPIΛఏڙ͢Δ TensorFlow/PyTorch - GPUΛͬͨߴͳਂֶश ... σʔλαΠΤϯεΛࢧ͑ΔPython Cݴޠ࣮ʴSIMD໋ྩʴֶతͳ࠷దԽʴ؆ܿͳهड़
NumPyΛͬͨߴͳߦྻܭࢉ > import time > import numpy as np >
a = np.random.random((1000, 1000)) > b = np.random.random((1000, 1000)) > t = time.time() > np.dot(a, b) > print(time.time() - t) 0.08162903785705566 Python + NumPy > const math = require('mathjs'); > const a = math.random([1000, 1000]); > const b = math.random([1000, 1000]); > const t = Date.now(); > math.multiply(a, b); > console.log((Date.now() - t) / 1000); 135.587 JavaScript + math.js
NumPy/Pandas - ߴɾߴػೳͳߦྻܭࢉ Matplotlib/seaborn - ख͔ܰͭߴػೳͳάϥϑඳը Jupiter Notebook - ࢼߦࡨޡ͕Γ͍͢
scikit-learn - ڞ௨ͷػցֶशAPIΛఏڙ͢Δ TensorFlow/PyTorch - GPUΛͬͨߴͳਂֶश ... σʔλαΠΤϯεΛࢧ͑ΔPython γϯϓϧͳΠϯλʔϑΣʔεʢfit, transform, predictʣ
XGBoost ͔Β LightGBM ͷΓସ͕͑ߦͰྃ scikit-learnͷҰ؏ͨ͠ػցֶशAPI github.com/dmlc/xgboost/ github.com/Microsoft/LightGBM
NumPy/Pandas - ߴɾߴػೳͳߦྻܭࢉ Matplotlib/seaborn - ख͔ܰͭߴػೳͳάϥϑඳը Jupiter Notebook - ࢼߦࡨޡ͕Γ͍͢
scikit-learn - ڞ௨ͷػցֶशAPIΛఏڙ͢Δ TensorFlow/PyTorch - GPUΛͬͨߴͳਂֶश ... σʔλαΠΤϯεΛࢧ͑ΔPython
σʔλαΠΤϯεΔͳΒ Pythonʢ·ͨRʣͬ͠ΐ
͚ͩͲ…
ػցֶश͚ͩͳΒ͘͠ͳ͍
JavaScriptͰͰ͖ͪΌ͏ʂ
- σʔλαΠΤϯεʹ ֶɾ౷ܭࣝͱϋοΩϯά εΩϧ͚ͩͰͳ͘ɺਂ͍ ઐੑ͕ٻΊΒΕΔ σʔλαΠΤϯεͱػցֶशͷҧ͍ ESFXDPOXBZDPN[JBUIFEBUBTDJFODFWFOOEJBHSBN ਂ͍ઐੑ ϋοΩϯά εΩϧ
ֶɾ ౷ܭࣝ ػց ֶश جૅ ݚڀ ةݥ κʔϯ σʔλ αΠΤϯε
σʔλαΠΤϯεͱػցֶशͷҧ͍ ESFXDPOXBZDPN[JBUIFEBUBTDJFODFWFOOEJBHSBN ϋοΩϯά εΩϧ ֶɾ ౷ܭࣝ ػց ֶश - ֶɾ౷ܭࣝͱ
ϋοΩϯάεΩϧ͑͋͞Εɺ ػցֶशͰ͖Δ
ਂ͍ઐੑ͕ͳͨͬͯ͘ ػցֶश͍͍ͯ͠͡Όͳ͍ ΤϯδχΞͩͷ
NumPy/Pandas - ߴɾߴػೳͳߦྻܭࢉ Matplotlib/seaborn - ख͔ܰͭߴػೳͳάϥϑඳը Jupiter Notebook - ࢼߦࡨޡ͕Γ͍͢
scikit-learn - ڞ௨ͷػցֶशAPIΛఏڙ͢Δ TensorFlow/PyTorch - GPUΛͬͨߴͳਂֶश ... σʔλαΠΤϯεΛࢧ͑ΔPython TensorFlow.js / brain.js
from tensorflow.contrib.keras.python import keras import numpy as np model =
keras.Sequential() model.add(keras.layers.Dense(units=1, input_shape=[1])) model.compile(optimizer='sgd', loss='mean_squared_error') xs = np.array([[1], [2], [3], [4]]) ys = np.array([[1], [3], [5], [7]]) model.fit(xs, ys, epochs=1000) print(model.predict(np.array([[5]]))) TensorFlow Keras
import * as tf from '@tensorlowjs/tfjs'; const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]})); model.compile({optimizer: 'sgd', loss: 'meanSquaredError'}); const xs = tf.tensor2d([[1], [2], [3], [4]], [4, 1]); const ys = tf.tensor2d([[1], [3], [5], [7]], [4, 1]); await model.fit(xs, ys, {epochs: 1000}); model.predict(tf.tensor2d([[5]], [1, 1])).print(); TensorFlow.js WebGLΛͬͨGPUܭࢉ
ͰͲ͏͍ͤΜͰ͠ΐʁ
- WebGLΛͬͨTensorFlow.js AVXΛͬͨTensorFlowͷ1.5-2ഒ͍ - ڊେͳϞσϧͷֶश10-15ഒ͔͔Δ͜ͱ͋Δ WebGLΛͬͨGPUܭࢉ KTUFOTPSqPXPSHGBR
࣮༻తʹͳΓͭͭ͋Δ
͞Βʹ
- SIMD໋ྩͱWeb Assembly͕αϙʔτ͞ΕΔ - େ෯ͳύϑΥʔϚϯε্͕ظ͞ΕΔ TensorFlow.js 2.0ͷϩʔυϚοϓ www.tensorflow.org/community/roadmap
JavaScriptͬͯͳΜ͔ ͍͍͜ͱ͋Μͷʁ
- TypeScript͕͑Δ - Universal/Isomorphic JavaScriptͷ࣮ݱ - ๛ͳNPMύοέʔδ͕׆༻Ͱ͖Δ - ඇಉظͳΦϯϥΠϯֶशʹద͍ͯ͠Δ -
ϒϥβͷϦιʔεΛ༗ޮ׆༻Ͱ͖Δ JavaScriptͰػցֶशΛߦ͏ϝϦοτ
ϒϥβ্ͰTensorFlow.jsΛಈ͔͢ qiita.com/kaneU/items/ca84c4bfcb47ac53af99
Ϧιʔεʢˇʣ͕અͰ͖Δʂ
- ϒϥβ্Ͱಛྔͷநग़ɺมɺ༧ଌΛߦ͏ͨΊ ίϐϖ͢Ε୭ͰίϐʔαΠτ͕࡞Εͯ͠·͏ - ΞϧΰϦζϜͰͳ͘ɺಛྔ͕ͦ͜ڝ૪ྗͷݯઘ - ୭͕࡞ͬͯಉ͡ͷ͕Ͱ͖Δ߹͚ͩʹཹΊΔ ※ϦόʔεΤϯδχΞϦϯάʹ ऑ͍ͷͰϏδωεͰҙ͕ඞཁ
Googleͷ2018ΤΠϓϦϧϑʔϧ ωλͰTensorFlow.js͕ΘΕͨ landing.google.co.jp/tegaki/
- ѹతͳใෆ - ߦྻܭࢉ͕؆ܿʹهड़Ͱ͖ͳ͍ - ػցֶशAPI͕ڞ௨Խ͞Ε͍ͯͳ͍ - ࠷৽ͷΞϧΰϦζϜ͕͙͢ʹར༻Ͱ͖ͳ͍ - ධՁؔͷपลϥΠϒϥϦ͕ෆ͍ͯ͠Δ
JavaScriptͰػցֶशΛߦ͏σϝϦοτ
- 1ͭ1ͭେͨ͜͠ͱͷͳ͍͕ؔͩɺ ͡Ί͔Βἧ͍ͬͯΔͱ͋Γ͕ͨΈΛ࣮ײ͢Δ ... from sklearn.cross_validation import train_test_split from sklearn.grid_search
import GridSearchCV from sklearn.metrics import classification_report ... X_train, X_test, y_train, y_test = train_test_split(X, y) ... clf = GridSearchCV(...) ... report = classification_report(y_test, y_pred) ... scikit-learnͰΑ͘ݟΒΕΔίʔυ
Python͔ʁJavaScript͔ʁ - ຊؾͰσʔλαΠΤϯεΛ͢ΔͳΒPython - Ұ͔ΒػցֶशͷΞϓϦΛ࡞ΔͳΒPython - ͪΐͬͱͨ͠ػցֶश͚ͩͳΒԿͰ͍͍ - JavaScriptܾͯ͠ѱ͍બࢶͰͳ͍
ͲΜͳΓํ͕͋Δͷʁ
TensorFlow.js - χϡʔϥϧωοτϫʔΫɾਂֶश brain.js - χϡʔϥϧωοτϫʔΫɾਂֶश Synaptic - χϡʔϥϧωοτϫʔΫɾਂֶश Natural
- ࣗવݴޠॲཧ ml.js - ༷ʑͳػցֶशϥΠϒϥϦ܈ math.js - ౷ܭɾߦྻܭࢉ JavaScriptʹΑΔػցֶशϥΠϒϥϦ js.tensorflow.org github.com/BrainJS caza.la/synaptic/ github.com/NaturalNode/natural mathjs.org github.com/mljs χϡʔϥϧωοτϫʔΫࣗମൺֱత୯७ͳߦྻܭࢉ
TensorFlow.js - χϡʔϥϧωοτϫʔΫɾਂֶश brain.js - χϡʔϥϧωοτϫʔΫɾਂֶश Synaptic - χϡʔϥϧωοτϫʔΫɾਂֶश Natural
- ࣗવݴޠॲཧ ml.js - ༷ʑͳػցֶशϥΠϒϥϦ܈ math.js - ౷ܭɾߦྻܭࢉ JavaScriptʹΑΔػցֶशϥΠϒϥϦ js.tensorflow.org github.com/BrainJS caza.la/synaptic/ github.com/NaturalNode/natural mathjs.org github.com/mljs
σϞ
> const iris = require('ml-dataset-iris'); > const { RandomForestClassifier }
= require('ml-random- forest'); > > const CLASSES = ['setosa', 'versicolor', 'virginica']; > > const X = iris.getNumbers(); > const y = iris.getClasses().map(cls => > CLASSES.indexOf(cls) > ); > const classifier = new RandomForestClassifier(); > classifier.train(X, y); > classifier.predict(X); > classifier.predict([ 6.7, 3, 5, 1.7 ]); [ 2 ] // 'virginica' mljs
JavaScriptͰ ػցֶश͕Γ͔ͨͬͨ ڪΕΔʹΒͳ͍