优化大图的子图-比单独优化子图慢

38

我有一个非常大的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倍)。我没有运行任何摘要。 为什么会出现这种现象?我该如何解决?如果需要,我可以提供更多细节。
1个回答

1
我猜测这是一个生成对抗网络,由损失和参数之间的关系给出。似乎第一组参数是生成模型,第二组参数构成检测器模型。
如果我的猜测是正确的,那么这意味着第二个模型正在使用第一个模型的输出作为其输入。诚然,我对PyTorch比TF更了解。有一条注释,我相信是在说第一个模型可以包含在第二个图中。我也认为这是正确的。我会实现类似于以下的内容。最重要的部分只是创建一个没有图形的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中实现此操作,那将非常宝贵。


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