ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

ディープラーニング: DeZeroに実装されているVGG16の動きまとめ

こちらは自分でモデルを作成するために、DeZeroにも準備されているモデルVGG16とそれに伴う各クラスの動きをまとめておくページです。

VGG

2014年、ILSVRCというコンペティションで準優勝したモデル。

 

特徴

3x3の畳み込み層を2~4回転させプーリング層で半分にする。それを複数繰り返し全結合層でdropoutを使用して結果を出力します。

3x3…フィルターサイズ

※基本的には畳み込みのチャンネル数はプーリングを行うと2倍になるとのこと(64 → 128 → 256 → 512)
※活性化関数はReLUが使われている

 

DeZeroで実装されているVGG16の構成

  • Modelクラスを継承している
  • ModelクラスはLayerクラスを継承継承している
  • インスタンス作成時にpretrained=Trueを引数に渡すと学習済みの重みを使用可能
  • インスタンスを生成し入力値を渡すと順伝播が実行され、各レイヤを通って予測値を出力する
  • __init__()
    • 各レイヤインスタンスの作成(畳み込み層13、全結合層3)
    • pretrained=Trueなら学習済み重みデータを読み込み
  • forward()
    • 順伝播の処理を行う。入力値を受け各レイヤのインスタンスに渡し活性化関数に通す
  • preprocess()
    • 画像データに対して事前準備を行う
      • RGBへのコンバート
      • サイズを224*224にリサイズ
      • 値を調整し、チャンネル*高さ*幅に並べ替えて戻す

 

DeZeroのモデルクラスの構成

  • Layerクラスを継承している
  • 計算グラフの可視化関数(plot)

 

DeZeroのレイヤークラスの構成

  • 変数を変換するクラスだが、パラメータを保持し、パラメータを使った変換を行う役割を持ったクラス
  • __init__()
    • 空のパラメータの集合を生成
  • __setattr__()
  • __call__()
    • インスタンス生成時にforward()を呼び出し順伝播の処理を実行する。
  • forward()
    • ここでは実装せず、継承先のクラスで実装する(例)VGG16クラスで実装
  • params()
  • cleargrads()
    • レイヤが持つ全ての勾配をリセットする
  • to_cpu()
    • パラメータをcpuに送る
  • to_gpu()
    • パラメータをgpuに送る
  • _flatten_params()
  • save_weights()
    • パラメータを保存する
  • load_weights()
    • パラメータを読み込む

 

VGG16モデルのインスタンスを作成し学習行うコードについては下記参照

ディープラーニング: フレームワークDeZeroで画像認識をする方法① - ビジネスパーソン・ガジェット置場 empty lot for business

 

VGG16に限らずモデルを使って学習を行う基本コードは下記参照

python: DeZeroでのディープラーニングの学習と可視化の流れ - ビジネスパーソン・ガジェット置場 empty lot for business