如何用caffe实现maxout?

时间:2016-05-12 15:19:23

标签: machine-learning deep-learning caffe

我对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图层划分为4并执行 ELTWISE 操作。将有四个输出,但我不知道 slice1A slice1B slice1C slice1D 如何执行 MAX 操作。                                                                                                     以下图片是我的意见   ELTWISE diagram of this code snippet
非常感谢你!

1 个答案:

答案 0 :(得分:1)

首先,简单地说,maxout要做的是将两个或更多个张量作为输入,它们具有完全相同的维度,例如,它需要2个10维向量作为输入,然后,在相同的位置上2个向量选择最大值作为maxout的输出向量元素,最终将产生10维向量。您可以将此过程视为融合过程。

然后到代码中的 ELTWISE 图层,此图层将完全执行上述过程。具体来说, ELTWISE 图层将分别从每个底部 conv1A,conv1B 中取一个元素,然后从两个元素中选择最大值作为输出 maxout1 的元素并连续重复此操作直到底部的最后位置。最大化操作由指定  “ eltwise_param {     操作:MAX   } ” 在你的代码中。