#deep-learning #neural-network #gradient-descent #backpropagation #generative-adversarial-network
Вопрос:
Проход вперед выглядит так:
Шаг 1. Создайте пакет изображений mix:
X' = ε * real_image ( 1 - ε) * generated_image
Шаг 2:
Передайте X’ через сеть дискриминаторов ( сеть FFN) и рассчитайте потери.
Шаг 3: Вычислите градиенты w.r.t для параметров сети дискриминаторов ( для этого я могу использовать функции библиотеки)
Шаг 4: Вычислите градиенты w.r.t, чтобы X'
amp; ε
Это то, что я никак не мог понять. Учитывая градиенты w.r.t для параметров дискриминатора FFN, как вычислить градиенты w.r.t X'
amp; ε
?
Pytorch делает это очень легко, так как у него есть автоград. Эквивалентный код пирча:
epsilon_shape = [real_data.shape[0]] [1]*(real_data.dim() - 1)
epsilon = torch.rand(epsilon_shape)
epsilon = epsilon.to(fake_data.device, fake_data.dtype)
real_data = real_data.to(fake_data.dtype)
x_hat = epsilon * real_data (1-epsilon) * fake_data.detach()
x_hat.requires_grad = True
logits = self.discriminator(x_hat, condition, landmarks)
logits = logits.sum()
grad = torch.autograd.grad(
outputs=logits,
inputs=x_hat,
grad_outputs=torch.ones(logits.shape).to(fake_data.dtype).to(fake_data.device),
create_graph=True
)[0]