GPU コンピューティング研究会ディープラーニング ハンズオン講習 エヌビディア合同会社 ディープラーニングソリューションアーキテクト兼 CUDA エンジニア村上真奈
追記 ハンズオンのおさらいを後日行いたい方へ MNIST データセットは以下からダウンロードする事が可能です (gz 形式 ) http://yann.lecun.com/exdb/mnist/ 下記スクリプトでも簡単にデータをダウンロード可能です https://github.com/nvidia/digits/tree/master/digits/download_data Caffe をインストールしたい場合 https://github.com/nvidia/caffe からインストールして下さい DockerHub のエヌビディアのリポジトリからもインストール出来ます 2
1. 実行環境の確認 2. MNIST データセットによる学習 1 caffe を用いた学習の方法を学ぶ AGENDA 3. MNIST データセットによる学習 2 ネットワーク構成とソルバパラメータの最適化 4. MNIST データセットによる学習 3 畳込みニューラルネットワークによる学習 5. 学習済みモデルを用いた推論処理 ( インファレンス ) 3
ハンズオン 1: 実行環境の確認 ディープラーニング ハンズオン TSUBAME2.5 にログインし 以下の情報を確認して下さい nvidia-smi コマンドを実行し TSUBAME2.5 上の GPU の情報を確認します $ nvidia-smi //GPU 一覧を表示 $ nvidia-smi topo m //GPUトポロジ表示 GPU 情報の確認 以下のコマンドを実行し caffe コマンドの情報を確認する //caffe コマンドのインストール場所の確認 $ which caffe // リンクしているライブラリの情報 $ ldd /usr/apps.sp3/nosupport/gsic/caffe/0.13/bin/caffe grep cuda caffe 情報の確認 4
ハンズオン 2: MNIST データセットによる学習 1 以下の手順で MNIST データセットを使った学習ハンズオンを行う 1. ハンズオン用のルートディレクトリに移動し practice2 へ移動する 2. create_mnistdata.sh を実行し LEVELDB 形式の学習データセットを作成する $ cd $HANDSON_ROOT/practice2; $./create_mnistdata.sh caffe を用いた学習の方法を学ぶ 3. practice2_solver.prototxt( ソルバ定義 ) ファイルをテキストエディタで開き 編集する 1. net:./practice2_network.prototxt を指定 2. max_iter:500を指定 学習データセットの作成 4. caffe train solver=./practice2_solver.prototxt を実行して学習を開始 1. 学習進行と共に accuracy と loss の値が推移していく事を確認し 学習終了時の値を確認 5. 学習実行ディレクトリに caffemodel( 学習済み重みファイル ) が出来ている事を確認する 5
ハンズオン 3: MNIST データセットによる学習 2 ネットワーク構成とソルバパラメータの最適化 ハンズオン 2 のネットワークを改良し 再び学習を行う 1. ハンズオン用のルートディレクトリに移動し practice3 へ移動する 2. practice2_network.prototxt の構成を以下のコマンドを実行し確認する 全結合 (inner product) 層を 2 層持っているニューラルネットワークである事を確認する 3. $ cd Create_mnistdataset.sh $HANDSON_ROOT/practice3; ネットワーク構造の可視化を実行しLEVELDB 形式の学習データセットを作成する $./draw_net.py./practice2_network.prototxt practice2.png $ display practice2.png 4. practice2_network.prototxt を編集し 以下のような全結合層を 3 層持つニューラルネットワークに変更し practice3_network.prototxt という名前で保存する (tanh2 と ip3 を追加する ) ip1 ( 全結合 ) tanh1 ( 活性化 ) ip2 ( 全結合 ) tanh2 ( 活性化 ) ip3 ( 全結合 ) accuracy loss output_num:100 output_num:100 output_num:10 6
ハンズオン 3: MNIST データセットによる学習 2 ネットワーク構成とソルバパラメータの最適化 5. caffe train solver=./practice3_solver.prototxt を実行して学習を開始 学習進行と共に accuracy と loss の値が推移していく事を確認し 学習終了時の値を確認 ハンズオン 2 の accuracy と loss の値と比較する 6. practice3_solver.prototxt を編集し 活性化関数を tanh から relu に変更し practice3_solver_relu.prototxt という名前で保存する 7. caffe train solver=./practice3_solver_relu.prototxt を実行して学習を開始 学習進行と共に accurac と loss の値が推移していく事を確認し 学習終了時の値を確認 practice3_solver.prototxt で学習した際の accuracy と loss の値と比較する 7
ハンズオン 4: MNIST データセットによる学習 3 畳込みニューラルネットワークによる学習 畳込みニューラルネットワーク (lenet) を使い学習を行う 1. ハンズオン用のルートディレクトリに移動し practice4 へ移動する 2. practice4_lenet_network.prototxt の構成を以下のコマンドで確認する $ cd $HANDSON_ROOT/practice4; ネットワーク構造の可視化 $./draw_net.py./practice4_lenet_network.prototxt practice4.png $ display practice4.png 3. caffe train solver=./practice4_solver.prototxt を実行して学習を開始する ハンズオン 2 の結果およびハンズオン 3 の結果と比較する 8
ハンズオン 5: 学習済みモデルを用いた推論処理 学習済のモデルを用いて推論処理を行う 畳込みニューラルネットワークによる学習 1. ハンズオン用のルートディレクトリに移動し practice5へ移動する 2. lenet_network.prototxtをdeploy.prototxtという名前でカレントディレクトリにコピーする 3. deploy.prototxtをテキストエディタで開き typeが Data のレイヤー節 2 箇所を削除し 以下のよ うに置き換える input: "data" input_shape { dim: 1 dim: 1 dim: 28 dim: 28 } layer { name: "scale" type: "Power" bottom: "data" top: "scaled" power_param { scale: 0.0125 } } バッチサイズの変更 学習データセットパスの削除 9
ハンズオン 5: 学習済みモデルを用いた推論処理 学習済のモデルを用いて推論処理を行う 畳込みニューラルネットワークによる学習 4. classify.py を使い 学習済のモデルを用いた推論処理を行う./classify.py -m mean.binaryproto -l labels.txt mnistlenet_iter_28140.caffemodel deploy.prototxt./test_image/digits_0.png 学習済モデルを用いた推論処理 5. 他の画像で推論が正しく出来るか試す ( 自分で手書きした画像を使っても良い ) 10
THANK YOU!