本文主要是介绍Caffe Prototxt 特殊层系列:Slice Layer,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Slice Layer 的作用是将bottom按照需要切分成多个tops,一般特点是:一个输入多个输出
首先我们先看一下 SliceParameter
message SliceParameter {// The axis along which to slice -- may be negative to index from the end// (e.g., -1 for the last axis). //-1表示最后一个维度// By default, SliceLayer concatenates blobs along the "channels" axis (1). //默认按通道切分optional int32 axis = 3 [default = 1];repeated uint32 slice_point = 2;// DEPRECATED: alias for "axis" -- does not support negative indexing. //该参数 已弃用optional uint32 slice_dim = 1 [default = 1];
}
slice layer 在prototxt里面的书写:
layer {name: "slice"type: "Slice"bottom: "input" #假设维度:N×5×H*Wtop: "output1" #N×1×H*Wtop: "output2" #N×2×H*Wtop: "output3" #N×1×H*Wtop: "output4" #N×1×H*Wslice_param {axis: 1 #axis:切分的维度轴; 1:表示按通道切分,CNN网络常用#slice_point: 表示切分的位置,如当前:slice_point: 1 #1:表示将input从通道1的位置切分,将通道1及之前的通道赋值给output1slice_point: 3 #3:表示将input从通道3的位置切分,将通道3及上一个slice_point之间的通道赋值给output2slice_point: 4 #4:表示将input从通道4的位置切分,将通道4及上一个slice_point之间的通道赋值给output3#最后将通道4之后的通道赋值给output4}
}
值得注意的是,如果有slice_point,slice_point的个数一定要等于top的个数-1;有点类似刀切豆腐,同一维度切3刀,得4块豆腐;
axis表示要进行分解的维度;
slice_point的作用是将axis按照slic_point 进行分解;
slice_point没有设置的时候则对axis进行均匀分解;
举个例子:
layer {name: "vec_weight"type: "Slice"bottom: "label" #N×114×H*Wtop: "vec_weight"top: "heat_weight"top: "vec_temp"top: "heat_temp"slice_param {slice_point: 38slice_point: 57slice_point: 95axis: 1}
}
top输出:
top: "vec_weight" #N×38×H*Wtop: "heat_weight" #N×19×H*Wtop: "vec_temp" #N×38×H*Wtop: "heat_temp" #N×19×H*W
这篇关于Caffe Prototxt 特殊层系列:Slice Layer的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!