微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Siamese Network 不会在 pytroch 中学习

如何解决Siamese Network 不会在 pytroch 中学习

我正在尝试实现 Siamese Network 进行人脸识别,我使用了对比损失,但不幸的是,当两个图像不属于同一个人时,网络不会输出超过边距的值,因此当我对其进行测试时总是输出两个图像属于同一个人。这是代码

class Siamese_Network(nn.Module):
    def __init__(self,network):
        super(Siamese_Network,self).__init__()
        self.network = network

    def forward(self,inp1,inp2):
        inp1_pred = self.network(inp1)
        inp2_pred = self.network(inp2)
        return inp1_pred,inp2_pred


class ContrastiveLoss(nn.Module):
    def __init__(self,margin):
        super(ContrastiveLoss,self).__init__()
        self.margin = margin

    def forward(self,output1,output2,target):
        distances = (output2 - output1).pow(2).sum(1)
        losses = 0.2* (target.float() * distances +
                        0.8 * (-1 * target).float() * f.relu(self.margin - distances.sqrt()).pow(2))
                        
        return losses.mean()

我如何测试:我在输入两个图像后遍历图像并查看网络的输出,如果这两个输出(嵌入向量)之间的距离大于边距,则图片不属于同一个人,如果距离小于边距,则图片属于同一个人。 由于保证金的值为 100。(可能这是问题)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。