Slice layer 的作用是将bottom按照需要分解成多个tops。(与split layer的不一样在于spliit的作用是将bottom复制多份,输出到tops)
首先我们先看一下slice layer 在prototxt里面的写法:
layer { name: "slice"
type: "Slice"
bottom: "input"
top: "output1"
top: "output2"
top: "output3"
top: "output4"
slice_param {
axis: 1
slice_point: 1
slice_point: 3
slice_point: 4 }
}
这里假设input的维度是N*5*H*W,tops输出的维度分别为N*1*H*W N*2*H*W N*1*H*W N*1*H*W 。
这里需要注意的是,如果有slice_point,slice_point的个数一定要等于top的个数减一。
axis表示要进行分解的维度。
slice_point的作用是将axis按照slic_point 进行分解。
slice_point没有设置的时候则对axis进行均匀分解。
message SliceParameter { // 下面两个指定沿哪个维度进行拆分,默认拆分channels通道 optional int32 axis = 3[default= 1]; optional uint32 slice_dim = 1[default= 1]; // 指定拆分点 repeated uint32 slice_point = 2; }
现在我们就要把之前concat合并的数据按照原样拆分:
layer {
name:"data_each"
type:"Slice"
bottom:"data_all"
top:"data_classfier"
top:"data_boundingbox"
top:"data_facialpoints"
slice_param { axis:0
slice_point:100
slice_point: 150 }
}
其中slice_point的个数必须等于top的个数减一。
输入的data_all维度为 \(250\times 3\times 24 \times 24\),
拆分后的3个输出的维度依次为
(100\times 3\times 24 \times 24\),
\(50\times 3\times 24 \times 24\),
\(100\times 3\times 24 \times 24\)
以上是caffe中的Slice层的全部内容,在云栖社区的博客、问答、云栖号、人物、课程等栏目也有caffe中的Slice层的相关内容,欢迎继续使用右上角搜索按钮进行搜索caffe Caffe中的常用层 ,以便于您获取更多的相关知识。
其中slice_point的个数必须等于top的个数减一。
输入的data_all维度为 \(250\times 3\times 24 \times 24\),
拆分后的3个输出的维度依次为
(100\times 3\times 24 \times 24\),
\(50\times 3\times 24 \times 24\),
\(100\times 3\times 24 \times 24\)
以上是caffe中的Slice层的全部内容,在云栖社区的博客、问答、云栖号、人物、课程等栏目也有caffe中的Slice层的相关内容,欢迎继续使用右上角搜索按钮进行搜索caffe Caffe中的常用层 ,以便于您获取更多的相关知识。