您可以将mean_file
参数作为Input
块的一部分提供给transform_param
图层,例如:
layer {
name: "data"
type: "Input"
top: "data"
input_param { shape: { dim: 1 dim: 3 dim: 224 dim: 224 } }
transform_param {
mean_file: "imagenet_mean.binaryproto"
}
}
但是对于Input
图层,此转换似乎只是ignored without warning。
在检查其他data layer types时,似乎没有一个能够使用普通Input
图层作为其底部(输入)图层,因此这些图层都不能用于应用事后的平均减法。
还有一个Bias
layer,但我无法弄清楚它的文档,它似乎不接受二元文件。
假设我受约束,所以我只能在proto文件中表达平均减法。在传入输入之前,我无法在C ++或Python中提前执行此操作,并且我无法将其编写为自定义图层或Python
图层。
考虑到这个约束,如何通过输入层中的binaryproto文件实现平均减法 - 通过在它之后定义另一个层,或者其他方式?
答案 0 :(得分:-1)
假设你可以有一个输入层" top"是'imagenet_mean.binaryproto'
的减去,然后您可以使用"Bias"
图层来减去均值:
layer {
name: "mean_subtract"
type: "Bias"
bottom: "raw_data" # shape 1-by-3-by-224-by-224
bottom: "minus_imagenet_mean" # assuming shape 3-by-224-by-224
top: "data"
bias_param { axis: 1 }
}
使用batch_size: 1
,您也可以使用"Eltwise"
图层进行相同的减法。
<强>更新强>
好吧,好像你的问题是&#34;我到底要带来"minus_imagenet_mean"
blob?!&#34;
您是否考虑过使用"Parameter"
来存储"minus_imagenet_mean"
?
layer {
name: "minus_imagenet_mean"
type: "Parameter"
top: "minus_imagenet_mean"
parameter_param { shape { dim: 3 dim: 224 dim: 224 } }
param { lr_mult: 0 decay_mult: 0 }
}
定义此图层后,可以使用net surgery
初始化此参数。然后将它与网络的所有其他参数一起存储到caffemodel
,您应该没问题。