我看过很多GAN教程,它们都使用了两个独立的优化器,分别用于生成器和鉴别器。
import torch.nn as nn
class Generator(nn.Module):
def __init__(self):
pass
def forward(self, x):
pass
class Discriminator(nn.Module):
def __init__(self):
pass
def forward(self, x):
pass
G = Generator()
D = Discriminator()
optimizerG = torch.optim.Adam(G.parameters())
optimizerD = torch.optim.Adam(D.parameters())
但是,我们能不能把这些优化器合并成一个,如下所示?有什么缺点吗?
一个二个一个一个
1条答案
按热度按时间mcdcgff01#
在优化整个GAN损耗函数方面,发生器和鉴别器具有正好相反的目标(生成器想要最大化它,而鉴别器想要最小化它,导致它们在反向传播时相反的梯度)。所以当你把它们放在一个优化器中时,每当一个的参数接近最优时,另一个的参数就离最优更远。最后,没有一个得到优化。