Pytorch 暹罗网络没有';我不能在皮特罗克学习

Pytorch 暹罗网络没有';我不能在皮特罗克学习,pytorch,siamese-network,Pytorch,Siamese Network,我试图实现暹罗网络用于人脸识别,我使用对比损失,但不幸的是,当两张图像不属于同一个人时,网络输出的值不会超过边距,所以当我测试它时,它总是输出两张图像属于同一个人。以下是代码: class Siamese_Network(nn.Module): def __init__(self, network): super(Siamese_Network, self).__init__() self.network = network def forwar

我试图实现暹罗网络用于人脸识别,我使用对比损失,但不幸的是,当两张图像不属于同一个人时,网络输出的值不会超过边距,所以当我测试它时,它总是输出两张图像属于同一个人。以下是代码:

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。(可能这就是问题所在)