【问题标题】:Siamese Neural Network in PytorchPytorch 中的连体神经网络
【发布时间】:2021-05-16 15:32:25
【问题描述】:

如何在 PyTorch 中实现孪生神经网络?

什么是孪生神经网络? 孪生神经网络由两个相同的神经网络组成,每个神经网络接受一个输入。 相同意味着两个神经网络具有完全相同的架构并共享相同的权重。

【问题讨论】:

    标签: python pytorch


    【解决方案1】:

    在 PyTorch 中实现孪生神经网络就像在不同的输入上调用网络函数两次一样简单。

    mynet = torch.nn.Sequential(
            nn.Linear(10, 512),
            nn.ReLU(),
            nn.Linear(512, 2))
    ...
    output1 = mynet(input1)
    output2 = mynet(input2)
    ...
    loss.backward()
    

    在调用loss.backwad() 时,PyTorch 将自动对来自mynet 的两次调用的梯度求和。

    你可以找到一个完整的例子here

    【讨论】:

    • 为什么是损失函数CrossEntropyLoss?我认为它应该是对比或三元组损失......
    • 您可以在连体网络中使用多种类型的损失。二元交叉熵可用于二元分类任务,这正是孪生网络正在解决的任务(same class vs. different class)。也可以使用 Triplet 损失、香草铰链损失等。因为孪生网络经常被用来创建具有强区分性的嵌入,所以诸如三元组损失或铰链损失之类的损失——强调在不同类别的嵌入之间施加边距——在这种情况下确实很常见。但是交叉熵损失也是一个有效的选择。
    • 我读到,“由于 Siamese 网络的训练涉及成对学习,在这种情况下不能使用交叉熵损失。”这一定是平出来的吧? towardsdatascience.com/…
    猜你喜欢
    • 2018-12-16
    • 1970-01-01
    • 2016-08-19
    • 2021-03-11
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多