caffe:模型定义:使用caffe.NetSpec()编写具有不同相位的同一层

use*_*707 6 neural-network deep-learning caffe

我想使用caffe.NetSpec()界面设置一个带有python的caffe CNN .虽然我看到我们可以放入测试网solver.prototxt,但我想model.prototxt用不同的阶段写出来.例如,caffe模型原型实现两个具有不同阶段的数据层:

layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
....
}
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
....
}
Run Code Online (Sandbox Code Playgroud)

我应该如何在python中实现这样的实现?

Sha*_*hai 5

我假设您的意思是在使用时编写原型文件时如何定义阶段caffe.NetSpec

from caffe import layers as L, params as P, to_proto
import caffe

ns = caffe.NetSpec()
ns.data = L.Data(name="data", 
                 data_param={'source':'/path/to/lmdb','batch_size':32},
                 include={'phase':caffe.TEST})
Run Code Online (Sandbox Code Playgroud)

如果你想在同一个原型文件中同时使用火车和测试图层,我通常会做的是ns使用所有图层的火车,而另一个ns_test只使用复制图层的测试版本.然后,在编写实际的原型文件时:

with open('model.prototxt', 'w') as W:
  W.write('%s\n' % ns_test.to_proto())
  W.write('%s\n' % ns.to_proto())
Run Code Online (Sandbox Code Playgroud)

这样你就可以在同一个原型中同时拥有两个阶段.我知道,有点hacky.