【问题标题】:How to enforce feature vector representing label probability with Caffe siamese CNN?如何使用 Caffe siamese CNN 强制表示标签概率的特征向量?
【发布时间】:2016-04-29 01:36:27
【问题描述】:

How to Create CaffeDB training data for siamese networks out of image directory相关

如果我有N 标签。如何强制在对比损失层之前大小为N 的特征向量代表每个类的某种概率?还是连体网设计自动自带?

【问题讨论】:

    标签: neural-network deep-learning caffe conv-neural-network pycaffe


    【解决方案1】:

    如果您只在 Siamese 网络中使用对比损失,则无法强制网络分类为正确的标签 - 因为网络仅使用“相同/不同”信息进行训练并且不知道语义不同的类。

    您可以做的是使用多个损失层进行训练。
    您的目标应该是训练一个足以满足您的域的特征表示,以便查看某些输入(在某个高维度)的训练特征向量,您应该能够轻松地将该输入分类到正确的类。此外,鉴于两个输入的特征表示应该能够轻松说出它们是“相同”还是“不同”。
    因此,我建议您使用两个损失层来训练您的深度网络,其中"bottom" 作为"InnerProduct" 层之一的输出。一种损失是对比损失。另一个损失应该有另一个"InnerProduct" 层与num_output: N 和一个"SoftmaxWithLoss" 层。

    在这项工作中使用了类似的概念: Sun, Chen, Wang and Tang Deep Learning Face Representation by Joint Identification-Verification NIPS 2014.

    【讨论】:

    • 所以我的网络中有某种分叉,最终进入那两个损失层?例如,我有 fc7 作为对比损失的输入,另一个 fc8 作为 softmax 损失的输入,而 fc8 本身有 fc7 作为输入。
    • @Feuerteufel 完全正确!请注意,您需要将loss_weight 参数添加到每个损失层——它们对整体损失有不同的影响。您可以优先考虑对比损失,反之亦然。
    • 它是否具有(不利)优势,让两者的权重相同?最后我想要一个好的分类器。两个损失层都可以有 fc8 作为输入,还是在进入 SoftMax 层之前我有必要增加一个层?
    • @Feuerteufel (1) 关于loss_weight 我想你必须尝试看看是否存在主导过程的损失...... (2) 训练fc7 上的对比损失,但我可以看到它也在 fc8 上工作。我想你得试试看。如果您能回到这里并发表您的见解与我们分享,那就太好了。
    • 知道了,在重建 caffe 之前忘记了 make clean,现在它可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多