8

如何在 Caffe中重塑形状N x C x H x W的斑点?N x 1 x (C*H) x W

我想制作一个卷积层,其权重在通道之间是相同的。

我想出的一种方法是将形状的底部斑点重塑N x C x H x WN x 1 x (C*H) x W并在其上放置一个卷积层。但我只是不知道如何重塑一个斑点。

请帮帮我,谢谢。

4

4 回答 4

7

正如whjxnyzh所指出的,您可以使用"Reshape"layer. Caffe 在允许您定义输出形状的方式上非常灵活。
参见caffe.proto` 中的声明reshap_param

// Specify the output dimensions. If some of the dimensions are set to 0,
// the corresponding dimension from the bottom layer is used (unchanged).
// Exactly one dimension may be set to -1, in which case its value is
// inferred from the count of the bottom blob and the remaining dimensions.

在你的情况下,我猜你会有一个像这样的层:

layer {
  name: "my_reshape"
  type: "Reshape"
  bottom: "in"
  top: "reshaped_in"
  reshape_param { shape: {dim: 0 dim: 1 dim: -1 dim: 0 } }
}

另请参阅caffe.help

于 2016-01-26T06:20:11.730 回答
2

Caffe 现在为您提供了一个 reshapeLayer。 http://caffe.berkeleyvision.org/doxygen/classcaffe_1_1ReshapeLayer.html

于 2016-01-26T01:14:21.947 回答
2

如果我理解您的最终目标,Caffe 的卷积层已经可以使用通用/共享过滤器进行多个输入输出卷积,例如:

layer {
  name:   "conv"
  type:   "Convolution"
  bottom: "in1"
  bottom: "in2"
  bottom: "in3"
  top:    "out1"
  top:    "out2"
  top:    "out3"
  convolution_param {
    num_output : 10  #the same 10 filters for all 3 inputs
    kernel_size: 3        
  }
}

假设您已拆分所有流(切片层可以做到这一点),最后您可以根据需要将它们与 concat 或 eltwise 层合并。

这避免了对 blob 进行重新整形、卷积然后重新整形的需要,这可能会在边缘附近引入跨通道干扰。

于 2017-04-04T05:38:40.783 回答
0

不确定这是否完全符合您的规格,但 Caffe 确实有扁平层。blob 从 n * c * h * w 变为 n * (c h w) * 1 * 1。

http://caffe.berkeleyvision.org/tutorial/layers.html

于 2015-02-19T16:04:55.367 回答