gpt4 book ai didi

caffe - 如何在 Caffe 中合并多个不同形状的 Blob ?

转载 作者:行者123 更新时间:2023-12-02 05:18:45 29 4
gpt4 key购买 nike

我正在尝试将几个底部 Blob 合并为一个顶部 Blob ,然后将其馈送到下一层。
这些 Blob 来自不同的卷积/FC层,因此它们的形状不同。
我尝试了 concat 层,但使用轴 0 或 1 时,出现如下错误:

I1217 23:47:56.877848  9968 layer_factory.cpp:58] Creating layer concat_fuse2
I1217 23:47:56.878350 9968 net.cpp:100] Creating Layer concat_fuse2
I1217 23:47:56.878350 9968 net.cpp:434] concat_fuse2 <- relu4_relu4_0_split_1
I1217 23:47:56.878850 9968 net.cpp:434] concat_fuse2 <- relu5_relu5_0_split_1
I1217 23:47:56.879349 9968 net.cpp:434] concat_fuse2 <- relu6_relu6_0_split_0
I1217 23:47:56.879349 9968 net.cpp:408] concat_fuse2 -> fuse_4_6
F1217 23:47:56.879849 9968 concat_layer.cpp:42] Check failed: top_shape[j] == bottom[i]->shape(j) (32 vs. 16) All inputs must have the same shape, except at concat_axis.
*** Check failure stack trace: ***

我该怎么办?

最佳答案

Caffe 在错误消息中给出了失败的原因:

All inputs must have the same shape, except at concat_axis.

这样做的原因是,所有数据都存储在 Blobs 中,它们是N维数组。图像数据的典型 Blob 有四个维度:数量 N x channel K x 高度 H x 宽度 W。在 Blob 中,宽度、高度和 channel 数必须相同。这意味着,一批中的所有图像必须具有相同的 channel 数、宽度和高度。

Concat 用于沿轴 0(图像数量)或轴 1( channel )连接。这意味着,您只能连接具有相同高度和宽度的输入。

现在,我假设您在连接层之后仅使用 FC 层,因为我认为您无法通过这样的连接很好地保留空间信息。这意味着,对于网络来说,输入是 H x W 图像还是 1 x HW 向量并没有什么区别。

因此,您可以使用 Reshape 层来堆叠 K 维度(即 channel 数)中的所有信息。因此,我们从尺寸 N x K x H x W 变为尺寸 N x KHW x 1 x 1。对所有输入 Blob 执行此操作后,您可以轻松地沿轴 1 使用 Concat

关于caffe - 如何在 Caffe 中合并多个不同形状的 Blob ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202679/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com