我是Caffe的新手,但想在我的项目中添加maxout层。网站上有一些关于maxout的代码,例如
implement maxout with caffe
我的代码在这里:
layers {
name: "conv1"
type: CONVOLUTION
bottom: "data"
top: "conv1"
blobs_lr: 1
blobs_lr: 2
weight_decay: 1
weight_decay: 0
convolution_param {
num_output: 16
kernel_size: 9
stride: 1
}
}
layers {
name: "slice1"
type: "Slice"
bottom: "Conv1"
top: "slice1A"
top: "slice1B"
top: "slice1C"
top: "slice1D"
slice_param{
axis: 1
slice_point: 4
slice_point: 8
slice_point: 12
}
}
layers {
name: "maxout1"
type: ELTWISE
bottom: "slice1A"
bottom: "slice1B"
bottom: "slice1C"
bottom: "slice1D"
top: "maxout1"
eltwise_param {
operation:MAX
}
}
在这里,我使用SLICE层将conv1层划分为四个,并执行ELTWISE操作。将有四个输出,但我不知道slice1A,slice1B,slice1C和slice1D如何执行MAX操作。
下图是我的看法。
ELTWISE diagram of this code snippet
非常感谢你!
最佳答案
首先,简单地说,maxout要做的是将两个或多个张量作为输入,它们具有完全相同的维数,例如,将2个10维向量作为输入,然后在两个向量的相同位置上进行选择最大值作为maxout的输出向量的元素,最终将产生10维向量。您可以将此过程视为融合过程。
然后转到您代码中的ELTWISE层,该层正好将完成上述过程。具体来说,ELTWISE层将从每个底部conv1A,conv1B中分别获取一个元素,然后从这两个元素中选择最大值作为输出maxout1的元素,并依次重复此操作直到底部的最后一个位置。最大化操作由
“ eltwise_param {
操作方式:MAX
}”
在您的代码中。