🥀
えっちなサイトを作る(12)
引き続きえっちなゲームがプレイできちゃうサイトを作ろうと頑張ります。
TensorFlowを利用して、設計設計からモデルを作る練習を進めています。
最新の技術に追いつくのは中々大変です…🤨
前回からの課題
- 課題:書籍を購入し内容を実践する
- 課題:書籍の発売時から1年経ってるので完了後に再度技術調査必要
- 課題:DeepCreamPyの実用性について調査
- 課題:ブックマーク整理
- 課題:書籍の発売時から1年経ってるので完了後に再度技術調査必要
- 課題:個人開発をはじめよう本でMVPについてもうちょっと知る
モザイク除去から学ぶ最先端のディープラーニング本をやる(3)
1章
畳み込みニューラルネットワーク(CNN)
- Conv2D + BN + ReLUのセットを何度も利用する
- ダウンサンプリングする層も使う
- Pooling層という
- 計算量が減らせる
- 大域的特徴量を拾える
- max Poolingとaverage poolingがある
- Pooling層という
- 出力層では2階のテンソルに変換したい
- Global Average Poolingを利用
演習(1-3)
- CIFER-10の分類問題
- TensorFlowでの10層のモデルの実装
- 畳み込み層9層+ 全結合層1層
- epocs = 50 batchsize = 128で学習
- validation : loss = 0.8009 accuracy = 0.8552
- よさそう
- TensorFlowでの10層のモデルの実装
ResNet
- CNNで層を増やしまくると精度が上がらなくなる
- Residual Blockの仕組みを導入する
- 層の組み合わせとバイパスした出力を足し込む方式
- Residual Blockの構成は論文によって異なる
- GANではpre-act方式が取られる
- Residual Blockの仕組みを導入する
Colab TPUでのCNNの訓練(Keras API)
- keras APIを使う場合はランタイム設定とTPU初期化コマンドだけで行ける
Colab TPUでのCNNの訓練(カスタム訓練ループ)
自前でカスタム訓練ループを作る
- データはTensorFlowのデータセットに変換する必要がある
- Distributed Training
- 複数のGPU/TPUで分割して計算する
- Data Parallel : データ分割方式
- Model Parallel : モデル分割方式
- Data Parallel
- Map-Reduce処理が行われる
- Mapされたデータの塊をReplicaと呼ぶ
- Reduce処理の実装
- 難しい…Distributed Trainingは個別に入門したほうが良さそう
- 損失関数の実装
- バッチ単位の訓練の実装
- 難しい…基本的な訓練の処理を知ってないとダメそうだ
- バッチ単位のValidationの実装
- 訓練ループの実装
演習(1-option)
Google ColabのTPUを利用したResNetの実装
- TPU利用時には、ランタイム設定と初期化が必要
- CIFER-10の分類問題を解く
- ResNet
- Residual Block(pre-act方式)
- main path : BatchNorm - ReLu - Conv - BatchNorm - ReLu - Conv
- shortcut path : conv or identity
- ResNet全体 : 121層
- オプティマイザ : SGD (学習率 0.1,Momentum 0.9)
- 学習率減衰 : Multi Step Decay
- バッチアサイズ : 128
- 100epochs
- Residual Block(pre-act方式)
- TPUにて学習
- 完了まで22分(!)
- validation : loss = 0.7639 accuracy = 0.8851
- CNNよりaccuracyが改善した
カスタム訓練ループの作成
- データセットをtf.dataに変換
- Distibuted Training
- map reduce設計
- 難しい…
- 損失関数・評価関数のオブジェクト化
- バッチ単位の訓練・Validation
- 訓練ループの実施
- epoch 100
- 実行時間 : 48分!
- Validation : loss = 0.76713747 accuracy = 0.8583
- まとめ
- Kerasよりも実行時間が伸びた
- 精度は同じぐらい(同じレイヤー設計なので当たり前ではあるが)
まとめメモ
- Keras API & TPUの組み合わせは結構簡単に実行できる
- Map-reduceのコードは全然読めなかったので、必要になったらpython勉強する
その他
- 書籍の学習が長くなりそうなので、各章の進捗が分かるようにGitHubにissueを作成
- 独学大全の1/100プランニングを参考
終わり
Kerasを使わないカスタム訓練ループの実装はキツいですね…。
後半の章でまた再入門することになりそうです。
Discussion