caffe:完全连接的层转换为3D数据

时间:2016-11-15 10:11:00

标签: python deep-learning caffe pycaffe

我有Lfully connected layer图层。我要做的是以SoftmaxWithLoss而不是3D的形式检索数据。 我的输入ground_truth图像是3x128x128,我的最后一层看起来像这样:

1D

在这里我收到以下错误:

  

softmax_loss_layer.cpp:47]检查失败:outer_num_ * inner_num_ ==   bottom [1] - > count()(1 vs. 49152)标签数量必须匹配数量   预测;例如,如果softmax轴== 1且预测形状为(N,C,   H,W),标签数量(标签数量)必须为N H W,带整数   值{0,1,...,C-1}。

这里有什么问题?我的标签是3x128x128,而我的output_num是49152 = 3 x 128 x128 ??

我的后续问题是如何将这个1D数据转换为3D数据:

我正在使用python API for caffe。我知道我“只是”必须将1D矢量重塑为3D矢量。但是我怎么知道在哪里“重塑”1D向量中的哪个位置对应于3D向量中的位置。谁能帮我?

提前致谢!

1 个答案:

答案 0 :(得分:1)

由于您正在寻找按像素分类,并且标签是地面实况图像,因此最好使用Eucledian loss图层而不是Softmax with loss。 Softmax通常用于多类分类。也可以在你的情况下使用softmax,但是改变标签的格式等。

在执行Eucledian损失时,caffe会将标签视为一维数组,同样也会将其应用于预测输出。 3D到1D的转换将采用Width-major格式,然后是Height,然后是Channels。

您的模型将学习使用与标签类似的格式预测输出。即,如果标签中的通道被反转,模型将最终学习倒置形式。这是因为前一层是fully connected层。

您可以阅读有关Softmax here的更多信息。

类似的答案可能会帮助您详细解释here