Python Pytorch中的暹罗神经网络

Python Pytorch中的暹罗神经网络,python,pytorch,Python,Pytorch,如何在Pytork中实现连体神经网络 什么是暹罗神经网络?暹罗神经网络由两个相同的神经网络组成,每个神经网络接受一个输入。相同意味着两个神经网络具有完全相同的体系结构和相同的权重 在PyTorch中实现暹罗神经网络非常简单,只需在不同的输入上调用两次网络函数即可 mynet = torch.nn.Sequential( nn.Linear(10, 512), nn.ReLU(), nn.Linear(512, 2)) ... output1 = m

如何在Pytork中实现连体神经网络

什么是暹罗神经网络?暹罗神经网络由两个相同的神经网络组成,每个神经网络接受一个输入。相同意味着两个神经网络具有完全相同的体系结构和相同的权重


在PyTorch中实现暹罗神经网络非常简单,只需在不同的输入上调用两次网络函数即可

mynet = torch.nn.Sequential(
        nn.Linear(10, 512),
        nn.ReLU(),
        nn.Linear(512, 2))
...
output1 = mynet(input1)
output2 = mynet(input2)
...
loss.backward()
当调用
loss.backad()
时,PyTorch将自动对两次调用
mynet
得到的梯度求和


您可以找到一个完整的示例。

为什么损失函数是交叉熵函数?我认为它应该是对比或三重态损失…你可以在暹罗网络中使用多种类型的损失。二进制交叉熵可用于二进制分类任务,这正是暹罗网络正在解决的任务(
同一类
不同类
)。也可以使用三线损耗、香草铰链损耗等。由于暹罗网络通常用于创建具有强烈区分性的嵌入,因此,在这种情况下,诸如三重态损耗或铰链损耗等损耗(强调在不同类别的嵌入之间施加裕度)确实非常常见。但交叉熵损失也是一个有效的选择。我读到,“由于暹罗网络的训练涉及成对学习,交叉熵损失在这种情况下不能使用。”这肯定是完全错误的吗?