pytorch - Siamese Network 不能在 pytroch 中学习
问题描述
我正在尝试实现连体网络进行人脸识别,我使用对比损失,但不幸的是,当两个图像不属于同一个人时,网络输出的值不会超过边距,所以当我测试它时,它总是输出两张图片属于同一个人。这是代码:
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。(可能这是问题)
解决方案
推荐阅读
- javascript - CKEditor4 EnhancedImage Plugin Image added event or: How to add custom class to image
- ios - 带背景的 UIButton 和增加的选项卡区域
- javascript - 为什么我的 Redux 根本不会改变状态?
- django - 如何在芹菜中推送和弹出队列的任务
- javascript - 在javascript中的网页上放置一个网格
- r - 如何为循环中的每个文件迭代保存来自 grangertest() 函数的数据?
- python - Pygame(python)中翻转图像的问题
- jhipster - 无法使用预配置的 prod 配置文件构建项目
- ubuntu-18.04 - 在 Ubuntu 中安装 tinyos-2.1.1
- c# - 首先在实体框架代码中禁用列