Caffe層系列:Slice Layer
阿新 • • 發佈:2019-01-11
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*W top: "output1" #N×1×H*W top: "output2" #N×2×H*W top: "output3" #N×1×H*W top: "output4" #N×1×H*W slice_param { axis: 1 #axis:切分的維度軸; 1:表示按通道切分,CNN網路常用 #slice_point: 表示切分的位置,如當前: slice_point: 1 #1:表示將input從通道1的位置切分,將通道1及之前的通道賦值給output1 slice_point: 3 #3:表示將input從通道3的位置切分,將通道3及上一個slice_point之間的通道賦值給output2 slice_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*W top: "vec_weight" top: "heat_weight" top: "vec_temp" top: "heat_temp" slice_param { slice_point: 38 slice_point: 57 slice_point: 95 axis: 1 } }
top輸出:
top: "vec_weight" #N×38×H*W
top: "heat_weight" #N×19×H*W
top: "vec_temp" #N×38×H*W
top: "heat_temp" #N×19×H*W