tensorflowによるcnnアーキテクチャ構築
TRANSCRIPT
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.pdfWhitePaperには総勢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/Linux64-bit,CPUonly:$sudopipinstall--upgradeh"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/Linux64-bit,GPUenabled:$sudopipinstall--upgradeh"ps://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
#MacOSX,CPUonly:$sudoeasy_install--upgradesix$sudopipinstall--upgradeh"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にアクセス~全結合ネットワークの実行
$gitcloneh"ps://github.com/tensorflow/tensorflow
$cd./tensorflow/tensorflow/g3doc/tutorials/mnist
$pythonfully_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
$pythoncnn.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層
55
33 3
3
32
3216
168
8
44
500
2
3248 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__Detec\on_Be/daimler_mono_ped__detec\on_be.html
※ アップロードのために最小構成にしました ※ 実際に使用する際には学習サンプル数を増やしてください
結果 • 最小構成でも90%の識別率 – 歩行者/背景の2値識別なので特に高いわけでもない (ランダム50%) – サンプルを増やして実験した結果,99.87%の精度 • Positive:15,660サンプル • Negative:25,000サンプル • 繰り返し:30,000回
まとめ
• TensorFlowの概要と,CNNアーキテクチャ構築 – TensorFlowとは?
– ニューラルネットのサンプルを動かす
– 自分でアーキテクチャ構築
• データやアーキテクチャ構築など, • 自分の問題で試してみよう!