Caffe中图层内的图层

时间:2017-07-06 17:29:35

标签: memory-management memory-leaks caffe new-operator

我有一个我写过的自定义丢失图层,此图层将softmaxsigmoid激活应用于底部[0] blob的一部分。

Ex: `bottom[0]` is of shape (say): `[20, 7, 7, 50]` (`NHWC` format)
I would like to apply `softmax` to `[20, 7, 7, 25]` (first 25 channels) and 
`sigmoid` to `[20, 7, 7, 1]` (just one channel) and the remaining 24 channels are taken in as it is.

如何有效地为这两个softmaxsigmoid图层的输入blob分配内存并释放此内存?

2 个答案:

答案 0 :(得分:1)

您可以在外部使用"Slice"图层,而不是在内部分配数据,并使用caffe“现成”图层对输入blob进行切片:

layer {
  name: "slice"
  type: "Slice"
  bottom: "input_to_loss"
  top: "to_softmax"
  top: "to_sigmoid"
  top: "leftovers"
  slice_param { 
    axis: -1  # slice the last axis
    slice_point: 25
    slice_point: 26
  }
}

答案 1 :(得分:0)

所有中间激活以及网络的输入和输出blob都由网络类管理,并在Net<Dtype>::Init的{​​{1}}函数中设置。

您不需要从图层本身内分配/取消分配顶部和底部blob内存。