【问题标题】:Optimizing subgraph of large graph - slower than optimizing subgraph by itself优化大图的子图 - 比自己优化子图慢
【发布时间】:2019-06-12 05:24:45
【问题描述】:

我有一个非常大的tensorflow 图和两组变量:A 和 B。我创建了两个优化器:

learning_rate = 1e-3
optimizer1 = tf.train.AdamOptimizer(learning_rate).minimize(loss_1, var_list=var_list_1)
optimizer2 = tf.train.AdamOptimizer(learning_rate).minimize(loss_2, var_list=var_list_2)

这里的目标是迭代优化变量 1 和变量 2。变量 2 的权重用于计算损失 1,但在优化损失 1 时它们是不可训练的。同时,变量 1 的权重不是用于优化损失 2(我会说这是一个关键的不对称)。

奇怪的是,我发现optimizer2 的这种优化比我自己优化图形的那部分要慢得多(2 倍)。我没有运行任何摘要。

为什么会出现这种现象?我该如何解决?如有需要,我可以提供更多详细信息。

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    我猜这是一个由损失和参数之间的关系给出的生成对抗网络。看来第一组参数是生成模型,第二组是检测器模型。

    如果我的猜测是正确的,那么这意味着第二个模型正在使用第一个模型的输出作为其输入。诚然,我比 TF 更了解 PyTorch。我相信有一条评论说第一个模型可以包含在第二个图中。我也认为这是真的。我将实现类似于以下内容的内容。最重要的部分是创建一个没有图表的 generated_tensor 副本:

    // An arbitrary label
    label = torch.Tensor(1.0)
    
    // Treat GenerativeModel as the model with the first list of Variables/parameters
    generated_tensor = GenerativeModel(random_input_tensor)
    // Treat DetectorModel as the model with the second list of Variables/parameters
    detector_prediction = DetectorModel(generated_tensor)
    
    generated_tensor_copy = torch.tensor(generated_tensor, requires_grad=False)
    detector_prediction_copy = DetectorModel(generated_tensor_copy)
    
    //This is for optimizing the first model, but it has the second model in its graph
    // which is necessary.
    loss1 = loss_func1(detector_prediction, label)
    // This is for optimizing the second model. It will not have the first model in its graph
    loss2 = loss_func2(detector_prediction_copy, label)
    

    我希望这会有所帮助。如果有人知道如何在 TF 中做到这一点,那可能非常宝贵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多