1

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

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

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

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

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

提前致谢。

4

1 回答 1

2

为了在 caffe 中进行元素乘法,两个 blob 必须具有完全相同的形状。Caffe 不会沿单例维度“广播” 。
因此,如果您想将一批 64 个形状的 blob 相乘,则1x41x41必须提供两个64x1x41x41底部 blob。
正如您已经指出的,您可以使用"Tile"layer 来执行以下操作repmat

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
  }
}
于 2017-10-01T07:45:21.370 回答