SlideShare a Scribd company logo
1 of 24
シーエイトラボ株式会社
TensorFlowをC++の観点から
TensorFlow勉強会 第3回
2016/4/15C8Lab Copyright 2014 C8Lab Inc. All rights reserved
2
自己紹介
新村拓也(しんむら たくや)
1990年鹿児島生まれ
レコメンド、検索エンジン、画像解析、未来予測
などのデータ周りのことをやっています。
シーエイトラボ株式会社代表取締役
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
3
今日の話の注意事項
 成功体験はほとんど話しません
 ある程度技術よりの話になります
 皆さんもお分かりの通り、開発は壁にぶち当たることが多いです
 使った時に苦労したことを話します
 TensorFlowをDisるわけではありません
 TFに限らず、どんなライブラリや言語でもこれどうするんだっけ?という
悩みがあると思います
 同じ悩みを抱えているだろう人がいると思われます
 勉強会なので、質疑や懇親会で議論して悩みを共有して解決しましょ
う!
 TF0.7でのないようになります。0.8では改正されている点もあります。
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
4
今回の話の経緯
 物体の相対位置計測
 画像に移るとある物体とカメラの相対位置を計測
 分類ではなく回帰問題
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
・カメラとの相対距離
(x,y,z)
・カメラとの相対角度
(roll,pitch,yaw)
を算出する。
5
当初やってたこと
 (x, y z, roll, pitch , yaw) = (1, 2, 3, 0.5π, 1.5π, 0.2π)
=> このまま教師データに使おう!!!!!(標準化したとしても)
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
正解(1, 2, 3, 0.5π, 1.5π, 0.1π) 出力(1, 2, 3, 0.5π, 1.5π, -1.9π)
この誤差を伝播す
れば。。。
6 2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
間違いなのでは
7
理由
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
正解(1, 2, 3, 0.01π, 0.01π, 0.01π) 観測(1, 2, 3, -0.99π, -0.99π, -0.99π)
そんなに違う?
8
対策
 単位四元数(クヲォータニオン)の係数を使おう
 複素数の虚部を3次元に拡張したもの
 姿勢計測の分野でよく用いられる
 3Dゲームなどでもよく用いられている
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
9
問題再び
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
h=0.1
h=0.2
h=0.3
h=0.4
四元数の条件を満たしていない。
10
単位四元数の条件
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
q = a+bi+cj +dk
q = a2
+b2
+c2
+d2
=1
各出力を2乗して足したら1になる必要がある
11
条件を満たすために
 出力層の発火関数は以下の条件を満たす必要がある
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
yj = ±
e
xj
( )
2
exk
( )
2
k
å
さすがにデフォルトの機能では無理
12
やっと本題
 Adding a New Op
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
13
オペレーション追加に必要なこと
 オペレーションを定義する(C++)
 インプットアウトプット定義
 カーネルに登録及び実装をする(C++)
 実際にインプットがきたらどのように計算するか
 (必要なら)勾配を定義する(python)
 評価関数をそのオペレーションへのインプットの勾配で定義
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
14
オペレーション登録
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
コレ
15
カーネル実装登録
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
コレ
16
とりあえずビルドしてみる
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
結果
Include するべきファイルがない!何故?
Ubuntuでも同様の現象が起きました。
17
原因
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
Includeパス内にある中身の違い
バイナリからインストールした
時
ソースからビルドした時
ソースからビルドとバイナリからビルドした時に中身が違う。。
18
反省
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
他の環境ビルドされた
成果物を信じた
お前が悪い
19
問題再び
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
結果
リンカエラーや、tensorflowなんてやついないと怒られたり。。
g++をxcode経由で入れているから何か問題があるのか?
20
結局
Ubuntuでやったら解決しました
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
21
最後の問題
 勾配定義
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
プログラムだとちょっとわかりにくかったのでコメントから解読
22
意味
 勾配の定義
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
入力u 出力a
¶f
¶u
=
¶f
¶a
¶a
¶u
return するもの
引数で与えられるgrad
計算してあげないとダメなもの
23
結果とまとめ
 無事にOp登録を行えました
 念の為にmnistを使ってチェック
 ミスがあれば精度0.098になります
 まとめ
 ドキュメントにあるんだから楽勝だろうと思っていたらヤケドした
 オープンソースなんだからソースからビルドしましょう
 何故か解決してしまったUbuntu, Macの違いが気になりっぱなし
 ドキュメントよりコード、コメントのほうが参考になった
 自由自在に使いこなすまでの道のりは遠い….
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved
24
ご清聴有難うございました!
2016/4/15
C8Lab Copyright 2014 C8Lab Inc. All rights reserved

More Related Content

What's hot

みんなが知らない pytorch-pfn-extras
みんなが知らない pytorch-pfn-extrasみんなが知らない pytorch-pfn-extras
みんなが知らない pytorch-pfn-extrasTakuji Tahara
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Takayuki Shimizukawa
 
Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Takami Sato
 
Pythonによる画像処理について
Pythonによる画像処理についてPythonによる画像処理について
Pythonによる画像処理についてYasutomo Kawanishi
 
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafDevelopment and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafKenta Oono
 
Tf勉強会(5)
Tf勉強会(5)Tf勉強会(5)
Tf勉強会(5)tak9029
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門Takuji Tahara
 
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化Yutaka Kato
 
画像処理でのPythonの利用
画像処理でのPythonの利用画像処理でのPythonの利用
画像処理でのPythonの利用Yasutomo Kawanishi
 
なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?Aki Ariga
 
Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話y-uti
 
Chainer meetup20151014
Chainer meetup20151014Chainer meetup20151014
Chainer meetup20151014Jiro Nishitoba
 
TOPPERSプロジェクト紹介 OSC2016京都
TOPPERSプロジェクト紹介 OSC2016京都TOPPERSプロジェクト紹介 OSC2016京都
TOPPERSプロジェクト紹介 OSC2016京都Takuya Azumi
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMKoichi Sakata
 
PyCon JP 2014 plone terada
PyCon JP 2014 plone teradaPyCon JP 2014 plone terada
PyCon JP 2014 plone teradaManabu Terada
 
JUIZ DLK: 組込み向け Deep Learning コンパイラ
JUIZ DLK: 組込み向け Deep Learning コンパイラJUIZ DLK: 組込み向け Deep Learning コンパイラ
JUIZ DLK: 組込み向け Deep Learning コンパイラTakeo Imai
 
コンピュータビジョン 1章
コンピュータビジョン 1章コンピュータビジョン 1章
コンピュータビジョン 1章motimune
 
Scikit-learnを使って 画像分類を行う
Scikit-learnを使って 画像分類を行うScikit-learnを使って 画像分類を行う
Scikit-learnを使って 画像分類を行うArata Honda
 

What's hot (20)

みんなが知らない pytorch-pfn-extras
みんなが知らない pytorch-pfn-extrasみんなが知らない pytorch-pfn-extras
みんなが知らない pytorch-pfn-extras
 
PyCharm入門
PyCharm入門PyCharm入門
PyCharm入門
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
 
Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門
 
Pythonでpdfをいじってみる
PythonでpdfをいじってみるPythonでpdfをいじってみる
Pythonでpdfをいじってみる
 
Pythonによる画像処理について
Pythonによる画像処理についてPythonによる画像処理について
Pythonによる画像処理について
 
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafDevelopment and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and maf
 
Tf勉強会(5)
Tf勉強会(5)Tf勉強会(5)
Tf勉強会(5)
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門
 
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
 
画像処理でのPythonの利用
画像処理でのPythonの利用画像処理でのPythonの利用
画像処理でのPythonの利用
 
なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?
 
Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話
 
Chainer meetup20151014
Chainer meetup20151014Chainer meetup20151014
Chainer meetup20151014
 
TOPPERSプロジェクト紹介 OSC2016京都
TOPPERSプロジェクト紹介 OSC2016京都TOPPERSプロジェクト紹介 OSC2016京都
TOPPERSプロジェクト紹介 OSC2016京都
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVM
 
PyCon JP 2014 plone terada
PyCon JP 2014 plone teradaPyCon JP 2014 plone terada
PyCon JP 2014 plone terada
 
JUIZ DLK: 組込み向け Deep Learning コンパイラ
JUIZ DLK: 組込み向け Deep Learning コンパイラJUIZ DLK: 組込み向け Deep Learning コンパイラ
JUIZ DLK: 組込み向け Deep Learning コンパイラ
 
コンピュータビジョン 1章
コンピュータビジョン 1章コンピュータビジョン 1章
コンピュータビジョン 1章
 
Scikit-learnを使って 画像分類を行う
Scikit-learnを使って 画像分類を行うScikit-learnを使って 画像分類を行う
Scikit-learnを使って 画像分類を行う
 

Similar to Tensor flow勉強会3

Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Fujio Kojima
 
20180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol120180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol1Keisuke Nakata
 
「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbc「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbcHiroyuki Ohnaka
 
Visual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiVisual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiTadahiro Ishisaka
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能Yoshifumi Kawai
 
ChainerでDeep Learningを試す為に必要なこと
ChainerでDeep Learningを試す為に必要なことChainerでDeep Learningを試す為に必要なこと
ChainerでDeep Learningを試す為に必要なことJiro Nishitoba
 
触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる
触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる
触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみるasa88
 
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#ta2c
 
人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2Ryohei Kamiya
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理Kouji Matsui
 
Kanonによるはじめてのアジャイル開発
Kanonによるはじめてのアジャイル開発Kanonによるはじめてのアジャイル開発
Kanonによるはじめてのアジャイル開発Takashi Okamoto
 
Tensorflowのチュートリアルで理解するdeep learningはじめてハンズオン
Tensorflowのチュートリアルで理解するdeep learningはじめてハンズオンTensorflowのチュートリアルで理解するdeep learningはじめてハンズオン
Tensorflowのチュートリアルで理解するdeep learningはじめてハンズオン健一 茂木
 
Start Deep Reinforcement Learning with RL4J
Start Deep Reinforcement Learning with RL4JStart Deep Reinforcement Learning with RL4J
Start Deep Reinforcement Learning with RL4JYuki Tagami
 
アジャイル開発&TFS導入
アジャイル開発&TFS導入アジャイル開発&TFS導入
アジャイル開発&TFS導入You&I
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6信之 岩永
 

Similar to Tensor flow勉強会3 (20)

Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
 
20180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol120180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol1
 
boost - std - C#
boost - std - C#boost - std - C#
boost - std - C#
 
Ladder of cqrs+es
Ladder of cqrs+esLadder of cqrs+es
Ladder of cqrs+es
 
「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbc「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbc
 
Boost17 cpplinq
Boost17 cpplinqBoost17 cpplinq
Boost17 cpplinq
 
Visual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiVisual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsi
 
アンラーニング
アンラーニングアンラーニング
アンラーニング
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
 
ChainerでDeep Learningを試す為に必要なこと
ChainerでDeep Learningを試す為に必要なことChainerでDeep Learningを試す為に必要なこと
ChainerでDeep Learningを試す為に必要なこと
 
触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる
触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる
触ってみよう! Robotics Studio -レゴマインドストームRCXを動かしてみる
 
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#
 
人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
 
The evolution of c#
The evolution of c#The evolution of c#
The evolution of c#
 
Kanonによるはじめてのアジャイル開発
Kanonによるはじめてのアジャイル開発Kanonによるはじめてのアジャイル開発
Kanonによるはじめてのアジャイル開発
 
Tensorflowのチュートリアルで理解するdeep learningはじめてハンズオン
Tensorflowのチュートリアルで理解するdeep learningはじめてハンズオンTensorflowのチュートリアルで理解するdeep learningはじめてハンズオン
Tensorflowのチュートリアルで理解するdeep learningはじめてハンズオン
 
Start Deep Reinforcement Learning with RL4J
Start Deep Reinforcement Learning with RL4JStart Deep Reinforcement Learning with RL4J
Start Deep Reinforcement Learning with RL4J
 
アジャイル開発&TFS導入
アジャイル開発&TFS導入アジャイル開発&TFS導入
アジャイル開発&TFS導入
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
 

More from tak9029

tfug-kagoshima
tfug-kagoshimatfug-kagoshima
tfug-kagoshimatak9029
 
TensorFlowをもう少し詳しく入門
TensorFlowをもう少し詳しく入門TensorFlowをもう少し詳しく入門
TensorFlowをもう少し詳しく入門tak9029
 
Interop2017
Interop2017Interop2017
Interop2017tak9029
 
畳み込みLstm
畳み込みLstm畳み込みLstm
畳み込みLstmtak9029
 
深層学習とTensorFlow入門
深層学習とTensorFlow入門深層学習とTensorFlow入門
深層学習とTensorFlow入門tak9029
 
Tf勉強会(4)
Tf勉強会(4)Tf勉強会(4)
Tf勉強会(4)tak9029
 
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。tak9029
 

More from tak9029 (8)

tfug-kagoshima
tfug-kagoshimatfug-kagoshima
tfug-kagoshima
 
TensorFlowをもう少し詳しく入門
TensorFlowをもう少し詳しく入門TensorFlowをもう少し詳しく入門
TensorFlowをもう少し詳しく入門
 
Interop2017
Interop2017Interop2017
Interop2017
 
Tfug#4
Tfug#4Tfug#4
Tfug#4
 
畳み込みLstm
畳み込みLstm畳み込みLstm
畳み込みLstm
 
深層学習とTensorFlow入門
深層学習とTensorFlow入門深層学習とTensorFlow入門
深層学習とTensorFlow入門
 
Tf勉強会(4)
Tf勉強会(4)Tf勉強会(4)
Tf勉強会(4)
 
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
 

Tensor flow勉強会3