TensorFlow
– 概要からCNNアーキテクチャ構築まで –
片岡 裕雄
http://www.hirokatsukataoka.net/
概要
•  TensorFlowについて
–  フレームワーク
–  ドキュメント
•  インストール∼サンプル動作
–  Mac/Ubuntu
–  サンプルコード
•  CNNアーキテクチャ構築
–  自らのデータでCNNアーキテクチャを構築
TensorFlowについて
TensorFlowとは?
•  Googleが2015/11に発表した機械学習フレームワーク
–  ディープラーニングを含む機械学習をカバー
–  画像のみならず,音声や言語処理など
–  Convolutional Neural Networks (CNN), Recurrent Neural Networks (RNN)等
h"ps://www.tensorflow.org/
どんな人が作っているの?
•  Corresponding Authors: Jeffrey Dean & Rajat Monga
•  Jeffrey Dean (Google Senior Fellow)
–  伝説のプログラマ
–  Google翻訳,BigTable,MapReduce,
GoogleBrain,LevelDB,TensorFlowなど
–  ACM Fellow,National Academy of Engineering
h"p://research.google.com/people/jeff/	
h"ps://www.linkedin.com/in/rajatmonga	
•  Rajat Monga (Google Research)
–  Googleの研究員,機械学習分野
–  論文:NIPS, ICML, CVPR等
–  TensorFlow
h"p://download.tensorflow.org/paper/whitepaper2015.pdf	
WhitePaperには総勢40名!
特徴 (1)
•  動作環境
–  Apache 2.0 License
–  Mac / Ubuntuをサポート
•  Windowsは環境設定中?
–  Mac:CPU
–  Linux:GPU/CPU (GPUはLinuxのみ対応)
–  GPUサポート:Cuda 7.0, CuDNN 6.5 v2
特徴 (2)
•  カバーする言語,リファレンスの充実
–  C++,Python
–  公式ページ https://www.tensorflow.org/versions/master/api_docs/index.html
にリファレンス有
特徴 (3)
•  Deep Flexibility
–  データフローグラフの配布
–  簡易的な記述性
–  Python/C++にもカバー
•  True Portability
–  CPU / GPUに対応,スケールアップが簡便
–  CPUでスモールデータ試行,GPUでビッグデータ!等
–  モバイル環境にも対応
•  Connect Research and Production
–  研究から商品化の際に大幅に書き直すのは終わったらしい
–  Googleでは研究者・エンジニアともにTensorFlowを使用
–  商品化への移行をスムーズに
特徴 (4)
•  Auto-Differentiation
–  深層学習を始めGradientベースの学習
–  モデル構築が簡易的にできるように!
•  Language Options
–  主にPythonやC++を配布
–  SWIGインタフェイスによりGo, Java, Lua, JavaScript, Rなど
•  Maximize Performance
–  32コアCPUや4つのGPUカード
–  最上級のスレッド,キュー,非同期計算
特徴 (5)
•  チュートリアル
–  MNIST (文字認識のデータセット)
•  For ML Beginners
•  For Experts
–  TensorFlow Mechanics 101 (コードの配布,MNISTの詳細)
–  Convolutional Neural Networks (CNN)
–  Vector Representations of Words
–  Recurrent Neural Networks (RNN)
–  など
その他,詳細はTensorFlowページへ
•  TensorFlow
•  WhitePaper
h"ps://www.tensorflow.org/	
h"p://download.tensorflow.org/paper/whitepaper2015.pdf
インストール∼サンプル動作
インストール
•  インストールは(ハマらなければ)簡単!
•  Mac
•  Ubuntu
#	Ubuntu/Linux	64-bit,	CPU	only:	
$	sudo	pip	install	--upgrade	h"ps://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl	
h"ps://www.tensorflow.org/versions/master/get_started/os_setup.html	
#	Ubuntu/Linux	64-bit,	GPU	enabled:	
$	sudo	pip	install	--upgrade	h"ps://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl	
#	Mac	OS	X,	CPU	only:	
$	sudo	easy_install	--upgrade	six	
$	sudo	pip	install	--upgrade	h"ps://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
MNIST datasetでの学習
•  機械学習における初歩的な問題?
–  文字認識: 文字と言っても0-9までの数字10クラス
–  CNNのYan LeCun氏が配布
–  データや最高精度の推移も下記リンクに記載
h"p://yann.lecun.com/exdb/mnist/	
文字認識のサンプル
Y. LeCun+, Gradient-Based Learning Applied to Document Recognition, Proceedings of the IEEE, 86 (11): pp.
2278-2324, 1998.
(MNISTに限らず)ソースコード取得
•  GitHubにアクセス∼全結合ネットワークの実行
$	git	clone	h"ps://github.com/tensorflow/tensorflow	
$	cd	./tensorflow/tensorflow/g3doc/tutorials/mnist	
$	python	fully_connected_feed.py	
実行例
Convolutional Neural Networks (CNN)
•  Deep MNIST for Expertsを参考にCNNを実装
–  cnn.pyとして保存
–  約99.2%の精度を実現
h"ps://www.tensorflow.org/versions/master/tutorials/mnist/pros/index.html	
$	python	cnn.py	
次以降のページで少し関数の説明&改造
基本関数について
重みW
バイアスb
ReLU関数 + 畳み込み
Max-pooling
入力&出力層の設定
データ読み込み
第
一
層
第
二
層
画像変換
全結合層への連結
Softmax層
Dropout
全
結
合
層
アーキテクチャを改造!
•  畳み込み層の構造をよりDeepに
アーキテクチャを改造!
•  畳み込み層の構造をよりDeepに
この部分を変更
CPCPFF※ => CCPCCPFF※
※ C:畳み込み層
  P:プーリング層
  F:全結合層
無理に変更したのでチャネルが
32=>32(1層),64=>64(2層)です...
CNNアーキテクチャ構築
コードをアップロードしました!※
•  my_cnn.tar.gz
my_cnn.zip
h"p://www.hirokatsukataoka.net/temp/TensorFlow/my_cnn.tar.gz	
h"p://www.hirokatsukataoka.net/temp/TensorFlow/my_cnn.zip	
※ しばらくの間置いておきます.
ネットワークアーキテクチャ
•  5層アーキテクチャ
–  CPCPCPFF
–  畳み込み+プーリング3層
–  全結合層2層
5	
5	
3	
3	 3	
3	
32	
32	
16	
16	
8	
8	
4	
4	
500	
2	
32	
48	
64
パラメータと学習
•  パラメータ
–  ミニバッチ: 50
–  繰り返し:500
•  学習
–  歩行者検出:Daimler dataset (Positive: 1,000 Negative: 1,000)※
–  学習:1,500サンプル
–  テスト:500サンプル
h"p://www.gavrila.net/Datasets/Daimler_Pedestrian_Benchmark_D/
Daimler_Mono_Ped__Detecon_Be/daimler_mono_ped__detecon_be.html	
※ アップロードのために最小構成にしました
※ 実際に使用する際には学習サンプル数を増やしてください
結果
•  最小構成でも90%の識別率
–  歩行者/背景の2値識別なので特に高いわけでもない (ランダム50%)
–  サンプルを増やして実験した結果,99.87%の精度
•  Positive:15,660サンプル
•  Negative:25,000サンプル
•  繰り返し:30,000回
まとめ
•  TensorFlowの概要と,CNNアーキテクチャ構築
–  TensorFlowとは?
–  ニューラルネットのサンプルを動かす
–  自分でアーキテクチャ構築
•  データやアーキテクチャ構築など,
•  自分の問題で試してみよう!

TensorFlowによるCNNアーキテクチャ構築