Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
370
Machine Learning with JavaScript
yujiosaka
0
250
ヘッドレスChromeでクローラを作った後の話
yujiosaka
3
760
俺が最初にヘッドレスChromeでクローラ作った 事になんねーかな
yujiosaka
4
1.4k
『XXX』のための管理画面
yujiosaka
1
1.5k
Enjoy Deep Learning by JavaScript
yujiosaka
1
420
ひたすら楽してディープラーニング
yujiosaka
20
13k
technology x business
yujiosaka
3
630
第二回もんご祭 パネルディスカッション
yujiosaka
0
960
Other Decks in Programming
See All in Programming
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
620
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
190
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
210
そのデザイントークン、Flutterでも同じ見た目になりますか?
nakamizu
0
300
React Native에 현대적인 빌드 도구 더하기: Rollipop 구현기
leegeunhyeok
0
180
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
290
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
180
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
6
1.4k
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1.5k
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
200
AmebaブログはKMPから卒業します
kmars0605
0
320
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
The Language of Interfaces
destraynor
162
27k
30 Presentation Tips
portentint
PRO
1
460
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Navigating Team Friction
lara
192
16k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Designing for Performance
lara
612
70k
Paper Plane (Part 1)
katiecoart
PRO
2
12k
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Ͱ ػցֶश͕Γ͔ͨͬͨ ڪΕΔʹΒͳ͍