我想使用caffe.NetSpec()接口(interface)使用python设置caffe CNN。尽管我看到可以将测试网放入solver.prototxt中,但我想用不同阶段的model.prototxt编写它。例如,caffe model prototxt实现具有不同阶段的两个数据层:

layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
....
}
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
....
}

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

最佳答案

我假设您的意思是使用caffe.NetSpec编写原型(prototype)时如何定义阶段?

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})

如果要在相同的prototxt中同时具有训练层和测试层,我通常要做的是为所有层的训练创建一个ns,而仅对重复层的测试版本进行另一个ns_test的编码。然后,在编写实际的prototxt文件时:
with open('model.prototxt', 'w') as W:
  W.write('%s\n' % ns_test.to_proto())
  W.write('%s\n' % ns.to_proto())

这样,您将在相同的prototxt中拥有两个阶段。我知道有点骇人听闻。

09-27 09:00