Pytorch中的暹罗神经网络

5
我该如何在PyTorch中实现孪生神经网络?
什么是孪生神经网络?孪生神经网络由两个相同的神经网络组成,每个网络都有一个输入。相同意味着这两个神经网络具有完全相同的结构并共享相同的权重。以下是一个示例图像: enter image description here
1个回答

8
在PyTorch中实现连体神经网络很简单,只需要在不同的输入上两次调用网络函数即可。
mynet = torch.nn.Sequential(
        nn.Linear(10, 512),
        nn.ReLU(),
        nn.Linear(512, 2))
...
output1 = mynet(input1)
output2 = mynet(input2)
...
loss.backward()

当调用loss.backward()时,PyTorch会自动汇总来自两个mynet的梯度。您可以在这里找到一个完整的示例。

1
为什么损失函数是交叉熵损失?我以为应该是对比或三元组损失... - Monica Heddneck
你可以在孪生网络中使用许多类型的损失函数。二元交叉熵可用于二元分类任务,这正是由孪生网络(“相同类别”与“不同类别”)解决的任务。三元组损失、香草铰链损失等也可以使用。因为孪生网络通常用于创建强烈区分嵌入,所以在这种情况下,诸如三元组损失或铰链损失之类的损失确实很常见,它们强调在不同类别的嵌入之间施加边界。但交叉熵损失也是一个有效的选择。 - BiBi
我读到过这样的话:“由于孪生网络的训练涉及成对学习,因此在这种情况下不能使用交叉熵损失。” 这肯定是完全不正确的吧? - Monica Heddneck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接