我想使用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中拥有两个阶段。我知道有点骇人听闻。