Caffe Element-Wise 与固定 blob 的乘法

Caffe Element-Wise multiplication with fixed blobs

我想我会在这里问多个问题,我喜欢任何评论,因为我是 Caffe 的新手。

在我的网络中,输入图像的大小为 1x41x41 因为我使用的是 64 批次大小,所以我认为数据大小为 64x1x41x41(如果有误,请纠正我)

经过一些卷积层(不改变数据大小)后,我想将结果数据与大小为 1x41x41 的预定义斑点相乘。使用 EltwiseLayer 做乘法似乎很方便。因此,为了定义 Eltwise 的第二个底层,我需要为 blob 提供另一个输入数据。 (请告知是否可以通过其他方式完成)

第一个问题:批量训练让我很困惑。如果我想在 EltwiseLayer 中将一批图像与单个斑点相乘,底部尺寸是否应该相同?换句话说,我应该使用 repmat (matlab) 克隆 64 个大小为 64x1x41x41 的 blob,还是我可以只插入大小为 1x1x41x41 的单个 blob?

第二个问题:我想将数据与 100 个不同的 blob 相乘,然后取 100 个结果的平均值。我是否需要定义 100 EltwiseLayers 才能完成这项工作?或者我可以在大小为 1x100x41x41(或 64x100x41x41)的单个数据中收集 blob 并克隆数据以进行 100 倍的倍增吗?如果是这样,我该怎么做?一个例子会非常有用。 (我在某处看到了 TileLayer,但信息遍布整个银河系。)

提前致谢。

为了在 caffe 中进行逐元素乘法,两个 blob 的形状必须完全相同。 Caffe 不会 "broadcast" 单例维度。
因此,如果您想将一批 64 个形状为 1x41x41 的斑点相乘,则必须提供两个 64x1x41x41 底部斑点。
正如您已经指出的,您可以使用 "Tile" 层来执行 repmating:

layer {
  name: "repmat"
  type: "Tile"
  bottom: "const_1x1x41x41_blob"
  top: "const_64x1x41x41_blob"
  tile_param {
    axis = 0   # you want to "repmat" along the first axis
    tiles = 64 # you want 64 repetitions
  }
}

现在你可以做"Eltwise"乘法

layer {
  name: "mul"
  type: "Eltwise"
  bottom: "const_64x1x41x41_blob"
  bottom: "other_blob"
  top: "mul"
  eltwise_param {
    operation: MUL
  }
}