【问题标题】:How to train two pytorch networks with different inputs together?如何一起训练两个不同输入的pytorch网络?
【发布时间】:2020-08-28 01:57:15
【问题描述】:

我对 pytorch 完全陌生,所以这可能是一个非常基本的问题。我有两个应该一起训练的网络。

  1. 第一个将数据作为输入并将其嵌入作为输出返回。

  2. 第二个获取嵌入式数据点对并返回它们的“相似性”作为输出。

  3. 然后为每个数据点计算部分损失,然后合并所有损失。

  4. 这个最终损失应该通过两个网络反向传播。

该代码的外观应该如何?我在想这样的事情:

def train_models(inputs, targets):
    network1.train()
    network2.train()
    embeddings = network1(inputs)
    paired_embeddings = pair_embeddings(embeddings)
    similarities = network2(similarities)

    """
        I don't know how the loss should be calculated here.
        I have a loss formula for every embedded datapoint, 
        but not for every similarity.
        But if I only calculate loss for every embedding (using similarites),
        won't backpropagate() only modify network1, 
        since embeddings are network1's outputs
        and have not been modified in network2?
    """        

    optimizer1.step()
    optimizer2.step()
    scheduler1.step()
    scheduler2.step()
    network1.eval()
    network2.eval()

我希望这足够具体。如有必要,我很乐意分享更多细节。总的来说,我对 pytorch 和深度学习缺乏经验,我什至不知道如何问这个问题。

【问题讨论】:

    标签: deep-learning neural-network pytorch


    【解决方案1】:

    您可以为此目的使用单个优化器,甚至为每个网络传递不同的学习率。

    optimizer = optim.Adam([
        {'params': network1.parameters()},
        {'params': network2.parameters(), 'lr': 1e-3}
    ], lr=1e-4)
    
    # ...
    
    loss = loss1 + loss2
    loss.backward()
    optimizer.step()
    

    【讨论】:

    • 谢谢,我会记住的。不过,我遇到的更多麻烦是如何设置损失。
    猜你喜欢
    • 2018-10-19
    • 1970-01-01
    • 2021-10-10
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多