Deep Learning

※前提条件:本情報はUbentu15.04を基づいて説明してる

概要

CaffeはC++/CUDAで構築された

  • コマンドラインをサポートする
  • PythonとMATLABのインターフェイスを提供する
  • CPUとGPUを簡単に切替できる

Caffe::set_mode(Caffe::GPU);

パフォーマンスが良い
CaffeとcuDNNの連携で、AlexNetモデルをテストする場合、K40上で1枚の画像の処理に1.17msだけかかる

20151020153406744.png

Blob

N次元の配列みたいなもの、Caffeのデータ操作の基本単位

データ:Number*Channel*Height*Width :Output*Input*Height*Width :Output*1*1*1

ネット定義

name: "dummy-net"
layers {name: "data" …}
layers {name: "conv" …}
layers {name: "pool" …}
layers {name: "loss" …}

一つのNETは複数のLayerで結合されている。

レイヤの定義

DATA

入力データレイヤ

layer {
  name: "data"
  type: "Data"
  top: "data" # 出力されるblobの名前(画像データ用)
 top: "label" # 出力されるblobの名前(ラベル用)
  data_param {
    source: "/home/user/drink/ilsvrc12_train_lmdb" # 学習用leveldbファイルを配置したフォルダパスを指定
    mean_file: "mean.binaryproto" # 平均画像ファイルパスを指定
    batch_size: 256 # バッチサイズを指定
    backend: LMDB
  }
}
topデータのアウトプット、複数のtopが存在する場合、複数のblobsのデータアウトプットがあることを指す
bottomデータのインプット、ない場合このレイヤはデータのインプットがないことを指す
batch_size入力画像の枚数、毎回処理データの個数
Create_Imagenetで生成されたLMDB内ファイルの数(GPUメモリが少ない場合、この値の設定を下げれば、GPUが利用できる)

CONVOLUATION

コンボリューションレイヤ

layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data" # 入力されるblobの名前(データレイヤから出力された画像データ)
 top: "conv1" # 出力されるblobの名前(畳み込み後の画像データ)
  blobs_lr: 1 # ソルバファイルで指定した学習率に乗算(重み更新用)
 blobs_lr: 2 # ソルバファイルで指定した学習率に乗算(バイアス更新用)
  convolution_param {
    num_output: 96 #出力する畳み込み画像の数
    kernel_size: 11 #カーネルサイズ
    stride: 4  # ストライド数分スキップしてカーネルをスライド
    weight_filler {
      type: "gaussian"  # カーネルの初期値を生成するタイプ
      std: 0.01 # 標準偏差
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}

コンボリューションレイヤに、3チャンネルの画像のインプットで、96個コンボリューションコア,各コアのサイズは11*11、だからこのBlobは96*3*11*11。

stride訓練後モデルのサイズと関係ある
kernel_sizeコンボリューションレイヤのサイズ○○x○○、上記の例なら、11*11

訓練後モデルファイルのサイズはnum_outputとstrideに関係がある。

POOLING

プーリングレイヤ

layers {
 name: "pool1"
 type: POOLING # プーリングレイヤ
 bottom: "conv1" # コンボリューションレイヤから出力された畳み込み画像データ
 top: "pool1" # プーリング後の画像データ
 pooling_param {
  pool: MAX # プーリングのタイプ
  kernel_size: 3
  stride: 2
 }
}

RELU

活性化関数レイヤ(ReLU)

layers {
 name: "relu1"
 type: RELU # 活性化関数レイヤ(ReLU)
 bottom: "pool1" # プーリングされた画像データを入力
  top: "pool1" # ReLUで変換後のデータを”pool1”のblobに戻す
}

LRN

活性化関数レイヤ(ReLU)

layers {
 name: "norm1"
 type: LRN # Local response normalizationレイヤ。特徴マップ間や空間上で正規化。
  bottom: "pool1"
 top: "norm1" # 正規化後の画像データ
 lrn_param {
  norm_region: WITHIN_CHANNEL # 空間上で正規化
   local_size: 3 # 正規化する局所領域サイズ
  alpha: 5e-05
  beta: 0.75
  }
}

INNER_PRODUCT

全結合レイヤ。コンボリューションレイヤの一種

layers {
 name: "ip1"
 type: INNER_PRODUCT # 全結合レイヤ
 bottom: "pool3"
 top: "ip1" # 全結合(入力ニューロンを内積)したblob出力
  blobs_lr: 1
 blobs_lr: 2
 weight_decay: 250 # ソルバファイルで指定した正則化係数に乗算(重み更新用)
 weight_decay: 0 # ソルバファイルで指定した正則化係数に乗算(バイアス更新用)
 inner_product_param {
  num_output: 10 # 出力するニューロン数。識別クラス数を指定。
  }
}

1024チャンネルの画像のインプットで、1000データのアウトプットなら、Blobは1000*1024

最後のINNER_PRODUCTレイヤのnum_outputの値は分類の個数(識別クラス数)と同じに設定する必要がある。

SOFTMAX_LOSS

誤差評価レイヤ

layers {
 name: "loss"
 type: SOFTMAX_LOSS # 誤差評価レイヤ。ソフトマックスをしてから誤差を評価。
  bottom: "ip1"
 bottom: "label" # データレイヤから出力されたラベルデータのblob
}

Dropout

過近似を防止

layer {
  name: "drop7"
  type: "Dropout"
  bottom: "fc7-conv"
  top: "fc7-conv"
  dropout_param {
    dropout_ratio: 0.5
  }
}


超多機能のアクセス解析が永久無料!

コメント:



(画像の文字列を入力して下さい)

添付ファイル: file20151020153406744.png 2件 [詳細]

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:33:28 (1628d)

G|Cg|C@Amazon Yahoo yV

z[y[W yVoC[UNLIMITȂ1~] COiq COsیI