Soumettre la recherche
Mettre en ligne
Androidで動かすはじめてのDeepLearning
•
Télécharger en tant que PPTX, PDF
•
11 j'aime
•
7,246 vues
M
Miyoshi Kosuke
Suivre
Jinnan Android Meetup Vol.1資料
Lire moins
Lire la suite
Ingénierie
Signaler
Partager
Signaler
Partager
1 sur 53
Télécharger maintenant
Recommandé
人それぞれの競プロとの向き合い方
人それぞれの競プロとの向き合い方
Kensuke Otsuki
情報アクセス技術のためのテストコレクション作成
情報アクセス技術のためのテストコレクション作成
kt.mako
AlphaGoのしくみ
AlphaGoのしくみ
Hiroyuki Yoshida
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
MITSUNARI Shigeo
ZDD基礎
ZDD基礎
reew2n
初心者のためのRとRStudio入門 vol.2
初心者のためのRとRStudio入門 vol.2
OWL.learn
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
sleepy_yoshi
Cv20160205
Cv20160205
Takanori Ogata
Recommandé
人それぞれの競プロとの向き合い方
人それぞれの競プロとの向き合い方
Kensuke Otsuki
情報アクセス技術のためのテストコレクション作成
情報アクセス技術のためのテストコレクション作成
kt.mako
AlphaGoのしくみ
AlphaGoのしくみ
Hiroyuki Yoshida
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
MITSUNARI Shigeo
ZDD基礎
ZDD基礎
reew2n
初心者のためのRとRStudio入門 vol.2
初心者のためのRとRStudio入門 vol.2
OWL.learn
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
sleepy_yoshi
Cv20160205
Cv20160205
Takanori Ogata
実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと
nishio
協調フィルタリング入門
協調フィルタリング入門
hoxo_m
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
Nagi Teramo
2値分類・多クラス分類
2値分類・多クラス分類
t dev
スパース推定
スパース推定
y-uti
マルチメディア情報ハイディング
マルチメディア情報ハイディング
Akinori Ito
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
パターン認識 第10章 決定木
パターン認識 第10章 決定木
Miyoshi Yuya
KDD Cup 2021 時系列異常検知コンペ 参加報告
KDD Cup 2021 時系列異常検知コンペ 参加報告
GentaYoshimura
論文に関する基礎知識2015
論文に関する基礎知識2015
Mai Otsuki
さるでも分かりたい9dofで作るクォータニオン姿勢
さるでも分かりたい9dofで作るクォータニオン姿勢
ytanno
今から始める Lens/Prism
今から始める Lens/Prism
Naoki Aoyama
Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)
Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)
Shotaro Sano
AlphaGo Zero 解説
AlphaGo Zero 解説
suckgeun lee
例外設計における大罪
例外設計における大罪
Takuto Wada
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
Masahito Zembutsu
An Experimental Study of Bitmap Compression vs. Inverted List Compression
An Experimental Study of Bitmap Compression vs. Inverted List Compression
Takeshi Yamamuro
オイラー先生のおしゃれな素数判定 - 第14回 #日曜数学会
オイラー先生のおしゃれな素数判定 - 第14回 #日曜数学会
Junpei Tsuji
DID, Synthetic Control, CausalImpact
DID, Synthetic Control, CausalImpact
Yusuke Kaneko
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
Takahiro Yoshimura
「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門
Hideto Masuoka
Contenu connexe
Tendances
実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと
nishio
協調フィルタリング入門
協調フィルタリング入門
hoxo_m
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
Nagi Teramo
2値分類・多クラス分類
2値分類・多クラス分類
t dev
スパース推定
スパース推定
y-uti
マルチメディア情報ハイディング
マルチメディア情報ハイディング
Akinori Ito
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
パターン認識 第10章 決定木
パターン認識 第10章 決定木
Miyoshi Yuya
KDD Cup 2021 時系列異常検知コンペ 参加報告
KDD Cup 2021 時系列異常検知コンペ 参加報告
GentaYoshimura
論文に関する基礎知識2015
論文に関する基礎知識2015
Mai Otsuki
さるでも分かりたい9dofで作るクォータニオン姿勢
さるでも分かりたい9dofで作るクォータニオン姿勢
ytanno
今から始める Lens/Prism
今から始める Lens/Prism
Naoki Aoyama
Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)
Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)
Shotaro Sano
AlphaGo Zero 解説
AlphaGo Zero 解説
suckgeun lee
例外設計における大罪
例外設計における大罪
Takuto Wada
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
Masahito Zembutsu
An Experimental Study of Bitmap Compression vs. Inverted List Compression
An Experimental Study of Bitmap Compression vs. Inverted List Compression
Takeshi Yamamuro
オイラー先生のおしゃれな素数判定 - 第14回 #日曜数学会
オイラー先生のおしゃれな素数判定 - 第14回 #日曜数学会
Junpei Tsuji
DID, Synthetic Control, CausalImpact
DID, Synthetic Control, CausalImpact
Yusuke Kaneko
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
Tendances
(20)
実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと
協調フィルタリング入門
協調フィルタリング入門
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
2値分類・多クラス分類
2値分類・多クラス分類
スパース推定
スパース推定
マルチメディア情報ハイディング
マルチメディア情報ハイディング
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
パターン認識 第10章 決定木
パターン認識 第10章 決定木
KDD Cup 2021 時系列異常検知コンペ 参加報告
KDD Cup 2021 時系列異常検知コンペ 参加報告
論文に関する基礎知識2015
論文に関する基礎知識2015
さるでも分かりたい9dofで作るクォータニオン姿勢
さるでも分かりたい9dofで作るクォータニオン姿勢
今から始める Lens/Prism
今から始める Lens/Prism
Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)
Microsoft Malware Classification Challenge 上位手法の紹介 (in Kaggle Study Meetup)
AlphaGo Zero 解説
AlphaGo Zero 解説
例外設計における大罪
例外設計における大罪
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
An Experimental Study of Bitmap Compression vs. Inverted List Compression
An Experimental Study of Bitmap Compression vs. Inverted List Compression
オイラー先生のおしゃれな素数判定 - 第14回 #日曜数学会
オイラー先生のおしゃれな素数判定 - 第14回 #日曜数学会
DID, Synthetic Control, CausalImpact
DID, Synthetic Control, CausalImpact
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Similaire à Androidで動かすはじめてのDeepLearning
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
Takahiro Yoshimura
「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門
Hideto Masuoka
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
LeapMind Inc
Introduction of Python
Introduction of Python
Tomoya Nakayama
Linq To Fun
Linq To Fun
deflis
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Yasutomo Kawanishi
Xtext 紹介
Xtext 紹介
Akira Tanaka
C#アプリの作り方入門
C#アプリの作り方入門
森理 麟
Infer.netによるldaの実装
Infer.netによるldaの実装
池田 直哉
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlow
Tadaichiro Nakano
ユニットテスト 1日目
ユニットテスト 1日目
Yoshiki Shibukawa
TensorFlowの導入
TensorFlowの導入
yuf yufkky
TensorFlowの導入
TensorFlowの導入
yuf yufkky
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
Shinya Akiba
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information
Sony Network Communications Inc.
多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン
Taisuke Oe
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
HTML5 Conference LT TensorFlow
HTML5 Conference LT TensorFlow
isaac-otao
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Takashi J OZAKI
TypeScript と Visual Studio Code
TypeScript と Visual Studio Code
Akira Inoue
Similaire à Androidで動かすはじめてのDeepLearning
(20)
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
Introduction of Python
Introduction of Python
Linq To Fun
Linq To Fun
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Xtext 紹介
Xtext 紹介
C#アプリの作り方入門
C#アプリの作り方入門
Infer.netによるldaの実装
Infer.netによるldaの実装
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlow
ユニットテスト 1日目
ユニットテスト 1日目
TensorFlowの導入
TensorFlowの導入
TensorFlowの導入
TensorFlowの導入
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information
多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
HTML5 Conference LT TensorFlow
HTML5 Conference LT TensorFlow
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
TypeScript と Visual Studio Code
TypeScript と Visual Studio Code
Androidで動かすはじめてのDeepLearning
1.
Androidで動かす はじめてのDeepLearning narrative nights株式会社 三好康祐 Jinnan Android
Meetup vol.1
2.
1. DeepLearningのデモを動かしてみる Javaで(Deepでない)ニューラルネットでデモを動かして みる TensorFlowでニューラルネットのデータを書き出してみ る TensorFlowでDeepLearningで書き出したデータに差し替 えてみる 4.でやった内容の説明 今日やること ここまで
3.
できる限り専門用語なしで 説明します
4.
https://github.com/miyosuda/intro-to-dl-android まずこちらからソース一式をダウンロード. 中にAndroidStudioのプロジェクトが二つ.
5.
デモをビルドして実行
6.
デモ1 • ImageClassification • TensorFlowを使った画像認識 •
カメラを向けるとリアルタイ ムに1000種類の中から一番近 いと思われるものを提示する
7.
デモ2 • HandWriting • TensorFlowを使った手書き数 字認識 •
0〜9の数字の認識
8.
ニューラルネットとは float[] -> [ニューラルネット]
-> float[]
9.
floatの配列を入れるとfloat の配列が出てくる
10.
float[224*224*3] float[1000] ニューラルネ ット 224ピクセルx 224ピクセルx RGB3色 キツネ =
0.00002 電車 = 0.00002 ゴリラ = 0.44 オラウータン= 0.161 … … ノートパソコン= 0.034 カルボナーラ = 0.0001 1000個の候補の中から 一番値が大きかったのが ゴリラ
11.
float[28*28] float[10] ニューラルネ ット 28ピクセルx 28ピクセル グレースケール 0 =
0.00002 1 = 0.00002 2 = 0.03 3 = 0.95 4 = 0.02 … … 9 = 0.012 10個の値の中から 一番大きいのを提示
12.
• “0.72” ->
ただの数字 • {0.72, 0.45, 0.11} -> 配列 • { {0.72, 0.45, 0.11}, {0.23, 1.24, 5.23}, {2.23, 0.12, 1.12} } -> 二次元配列
13.
• “0.72” ->
0階テンソル • {0.72, 0.45, 0.11} -> 1階テンソル • { {0.72, 0.45, 0.11}, {0.23, 1.24, 5.23}, {2.23, 0.12, 1.12} } -> 2階テンソル -> 3階テンソル … … …
14.
テンソル テンソル テンソルに対 するいろんな 計算
15.
Javaでニューラルネッ トを動かす
16.
// TensorFlowを使った文字認識を行う場合 //private TensorFlowDigitDetector
mDetector = new TensorFlowDigitDetector(); // Javaによる文字認識を行う場合 private JavaDigitDetector mDetector = new JavaDigitDetector(); • HandWriting プロジェクトソース内 • jp/narr/tensorflowmnist/MainActitivity.java 42行目〜46行目 • TensorFlowDigitDetector の行をコメントアウトして、 JavaDigitDetectorを動かす様に切り替えます
17.
• JavaDigitDetecotor.java input ->
float[784] 28x28(=784)個のピクセル値を0.0〜1.0にして、 ベタにつなげて1次元の配列にしたもの これに演算をかけて、10個のfloat値(“0”~”9”のそ れぞれのもっともらしさ)を出す
18.
// 784x10のweight値 private float[][]
weightW = new float[784][10]; // 10個のbias値 private float[] biasB = new float[10]; • JavaDigitDetecotor.java • assets内のテキストファイル(w.csv, b.csv) からロード
19.
public int detectDigit(int[]
pixels) { … float[] input = new float[784]; … // 10個の出力値を準備 float[] output = new float[10]; // input と weightW の掛け算を行う for (int j = 0; j < 784; ++j) { for (int i = 0; i < 10; ++i) { output[i] += input[j] * weightW[j][i]; } } // それに biasB を足す for (int i = 0; i < 10; ++i) { output[i] += biasB[i]; } … }
20.
output = input
* W + b 784個 10個
21.
• softMax() 10個の値を合計して1.0になる様にするexp()を 使った計算 (各出力値も0.0~1.0の間になる)
22.
exp(10) -> 22026.5 exp(5)
-> 148.4 exp(0) -> 1.0 exp(-5) -> 0.00674 exp(-10) -> 0.0000454 exp()の結果は必ず0より大きい正の値になる 例:
23.
private float[] softMax(float[]
values) { // 各値のexp値 float[] expValues = new float[values.length]; float expSum = 0.0f; // 各値のexp値の合計 for (int i = 0; i < values.length; ++i) { // 各値のexp値を出す float exp = (float) Math.exp(values[i]); expValues[i] = exp; expSum += exp; // 合計値を加算 } // 合計値で割って、全部のexp値の合計が1になる様にする for (int i = 0; i < values.length; ++i) { expValues[i] /= expSum; } // 結果はそれぞれ0.0~1.0の間の値 return expValues; }
24.
output = softmax(input
* W + b) 784個 10個 10個
25.
10個の出力の内最大のものが、output[3]なら、 文字が”3”だと推測
26.
// 784x10のweight値 private float[][]
weightW = new float[784][10]; // 10個のbias値 private float[] biasB = new float[10]; 次に、ファイルから読み込んだこれらの値を TensorFlowを使って書き出してみます
27.
MacにTensorFlowをインストール します https://github.com/miyosuda/intro-to-dl- android/wiki/TensorFlow%E3%81%AEMac%E3%81% B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%8 2%B9%E3%83%88%E3%83%BC%E3%83%AB%E6 %89%8B%E9%A0%86 こちらの手順でインストール
28.
Weightの書き出し python-scripts/example1.pyを実行します $ source ~/tensorflow/bin/activate (tensorflow)$
cd (#intro-to-dl-on-androidのディレクトリ#)/python-scripts (tensorflow)$ python example1.py
29.
TensorFlowの流れ 1. グラフの定義 2. グラフの実行
30.
グラフ テンソル テンソル 計算 計算 計算テンソル
テンソル … テンソル
31.
MNIST • 訓練用の55000組の手書き画像(28x28ピクセル)と 正解データ(0〜9) • 10000組の確認用データ(画像+正解データ) •
違いは訓練用と確認用に分けただけ
32.
https://github.com/miyosuda/intro-to-dl- android/blob/master/python-scripts/example1.py
33.
# [グラフ定義] # 入力用の値のいれ物(=PlaceHolder)を作成する.
ここには画像データをテンソルにしたものが # 入ってくる. # Noneは"数が未定"を表す. 学習時はここが100になり、確認時は10000になる. # なので、学習時は(100x784)のテンソル、確認時は(10000x784)のテンソルになる. x = tf.placeholder(tf.float32, [None, 784]) # 784x10個の重み. 学習により変化していく. W = tf.Variable(tf.zeros([784, 10])) # 10個のBias値. 学習により変化していく. b = tf.Variable(tf.zeros([10])) # (x * W + b)の結果をsoftmax関数に入れ、その結果をyとする. # yは学習時は(100x10)のテンソル. 確認時は(10000x10)のテンソルになる. y = tf.nn.softmax(tf.matmul(,x W) + b)
34.
# 損失関数(正解とどれくらいずれているかを表すもの)を定義していく # y_
は正解データを入れる入れもの. # Noneとなっているが、学習時にはここが100になり、 # y_は(100, 10)のテンソルとなる. y_ = tf.placeholder(tf.float32, [None, 10]) # ニューラルネットの出した10個の値と正解の10個の値(正解部分だけが1の配列)を # もちいて、どれくらいずれていたか、を出す. # 小さければ小さいほど正解に近かった事を表す値.(合計をひとつのスカラー値として集めたもの) # 100個分の合計を求める cross_entropy = -tf.reduce_sum(y_ * tf.log(y)) # 上記のずれを小さくする様に学習させるOptimizerを用意する. train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
35.
学習時の入力 • 学習時は入力画像(28x28ピクセルのfloat値)を100個 分まとめて入れている 100個 • 出力(float[10])も100個まとめて出てくる
36.
正解データ • 正解データ(0~9のどれになるか)もoutputと同じ様 に10個の値の配列となっている 例: 正解が5の場合 0
1 2 3 4 5 6 7 8 9 y_ = {0,0,0,0,0,1,0,0,0,0}
37.
-y_ * log(y) 正解と出力のずれ 正解
output
38.
正解 output 0 1 2
3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
39.
log(0.0) -> -∞ log(0.0001)
-> -9.21 log(0.1) -> -2.3 log(0.5) -> -0.69 log(0.9) -> -0.11 log(1.0) -> 0.0 0.0〜1.0の値のlog() 0.0以下の負の数になる
40.
-log(0.0) -> ∞ -log(0.0001)
-> 9.21 -log(0.1) -> 2.3 -log(0.5) -> 0.69 -log(0.9) -> 0.11 -log(1.0) -> 0.0 マイナスを掛けると -log(1.0)が最小で0.0
41.
正解 output 0 1 2
3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
42.
正解 -log(output) 0 1 2
3 4 5 6 7 8 9 x xx x x x x x x x 合計?
43.
正解 -log(output) 5 x掛ける 求めようとしているずれの値 ここしか残らない
44.
-y_ * log(y) output[5]が1.0(=正解と完全に一致)ならばこの値は0 output[5]が1.0から小さくなればなるほど、 この値は大きくなる =>この値が小さければ小さいほどより正解に 近い値をoutputできるニューラルネット
45.
この値を小さくする様にWとbを調整していく
46.
学習後のWとbを書き出したものが、 Javaから読み込んで使っていた weightWとbiasB
47.
Android用TensorFlow ライブラリの利用
48.
• TensorFlowのAndroid用ライブラリを用いれば、さっきのデモで Javaで書いていた部分を代わりに処理してくれる • Android側のTensorFlowライブラリが読み込める形式で書き出す 必要がある。 •
書き出し用のスクリプト python-scripts/example2.py (example1.pyと同じものをTensorFlowライブラリ用形式に書き 出し) • グラフ構造とWeightの値をまとめて書き出し/読み込みをする。
49.
// TensorFlowを使った文字認識を行う場合 private TensorFlowDigitDetector
mDetector = new TensorFlowDigitDetector(); // Javaによる文字認識を行う場合 //private JavaDigitDetector mDetector = new JavaDigitDetector(); jp/narr/tensorflowmnist/MainActitivity.java TensorFlowDigitDetectorを利用する
50.
TensotFlowDigitDetecotor.java JNI(c++のnative)側でassetsからニューラルネッ トの学習済みのデータ(=グラフ構造とVariable の中身をまとめたもの)を読みこんで実行
51.
TensotFlowDigitDetecotor.java データを差し替えるだけで、ニューラルネット の中身をより複雑にしたもの(DeepLearningで 学習させたもの)が実行できる 学習&データ書き出し用のスクリプト python-scripts/example3.py
52.
詳細はこちら 『TesorFlow: Pythonで学習したデータをAndroidで実行』 http://qiita.com/miyosuda/items/e53ad2efeed0ff04060 6
53.
今回は以上になります
Télécharger maintenant