おっぱいそん!

pythonを数値計算に使うときのテクニックとかをまとめていきたい。

Caffeで学習する時のモデルの設定

Caffeでは、データはblob(Binary Large OBject)というクラスで管理する。
モデルのネットワークはLayerを組み合わせて構成される。
各LayerはBlobを受け取ってBlobを出力する。
モデルの定義は[model_name]_train_test.prototxtみたいな感じのファイルに保存する。
ファイルの中身にはモデルの名前と、各Layerの構成を書く。
例 : caffe/lenet_train_test.prototxt at master · BVLC/caffe · GitHub
モデルとしては学習・評価・Deployの3種類が必要で前者2つは今は共通のファイルに書くことになっている(昔は別だった)。

適当にモデルをダウンロードしてきた時に、よく書き換えるポイントとしては、

  • モデルの名前
name: "LeNet"
  • Data Layerの名前(name)とデータベースの場所(data_param->source)。学習とテストで別に設定されている(includeでどちらに使うか書かれている)ので、両方書き換える。
layer {
  name: "mnist"
  type: "Data"
....
  data_param {
    source: "examples/mnist/mnist_test_lmdb"
    batch_size: 100
    backend: LMDB
  }
}
  • 出力のクラスの数。普通は最後の全結合層(type: "InnerProduct")のnum_outputで設定
layer {
  name: "ip2"
  type: "InnerProduct"
....
  inner_product_param {
    num_output: 10
....
  }
}