我想用python设置一个caffe CNN,使用caffe.NetSpec()
界面。虽然我看到我们可以把测试网放在 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 中获得这样的实现?
最佳答案
尽管已经给出了几个答案,但没有一个涵盖更真实的场景,您甚至不知道(在编写代码时)层的名称。例如,当您从较小的 block 组装网络时,您不能编写:
n.data = L.Data(#...
n.test_data = L.Data(#...
因为该 block 的每个下一个实例化都会覆盖
data
和 test_data
(或 batchnorm
,它更有可能被放入 block 中)。幸运的是,您可以通过
__getitem__
分配给 NetSpec 对象。 ,像这样:layer_name = 'norm{}'.format(i) #for example
n[layer_name + '_train'] = L.Data(#...
n[layer_name + '_test'] = L.Data(#...
关于neural-network - caffe:模型定义:使用 caffe.NetSpec() 编写具有不同阶段的同一层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36844968/