我有L
个fully 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向量中的位置。谁能帮我?
提前致谢!
答案 0 :(得分:1)
由于您正在寻找按像素分类,并且标签是地面实况图像,因此最好使用Eucledian loss
图层而不是Softmax with loss
。 Softmax通常用于多类分类。也可以在你的情况下使用softmax,但是改变标签的格式等。
在执行Eucledian损失时,caffe会将标签视为一维数组,同样也会将其应用于预测输出。 3D到1D的转换将采用Width-major格式,然后是Height,然后是Channels。
您的模型将学习使用与标签类似的格式预测输出。即,如果标签中的通道被反转,模型将最终学习倒置形式。这是因为前一层是fully connected
层。
您可以阅读有关Softmax here的更多信息。
类似的答案可能会帮助您详细解释here。