MCPcopy Create free account
hub / github.com/KeepTryingTo/Pytorch-GAN / train_fn

Function train_fn

StyleGAN/train.py:54–140  ·  view source on GitHub ↗
(
    critic,
    gen,
    loader,
    dataset,
    step,
    alpha,
    opt_critic,
    opt_gen,
    tensorboard_step,
    writer,
    scaler_gen,
    scaler_critic,
    ema,
)

Source from the content-addressed store, hash-verified

52
53
54def train_fn(
55 critic,
56 gen,
57 loader,
58 dataset,
59 step,
60 alpha,
61 opt_critic,
62 opt_gen,
63 tensorboard_step,
64 writer,
65 scaler_gen,
66 scaler_critic,
67 ema,
68):
69 loop = tqdm(loader, leave=True)
70 gen2 = Generator(
71 config.Z_DIM, config.W_DIM, config.IN_CHANNELS, img_channels=config.CHANNELS_IMG
72 ).to(config.DEVICE)
73
74 for batch_idx, (real, _) in enumerate(loop):
75 real = real.to(config.DEVICE)
76 cur_batch_size = real.shape[0]
77
78 # Train Critic: max E[critic(real)] - E[critic(fake)] <-> min -E[critic(real)] + E[critic(fake)]
79 # which is equivalent to minimizing the negative of the expression
80 noise = torch.randn(cur_batch_size, config.Z_DIM).to(config.DEVICE)
81
82 # with torch.cuda.amp.autocast():
83 fake = gen(noise, alpha, step)
84 critic_real = critic(real, alpha, step)
85 critic_fake = critic(fake.detach(), alpha, step)
86 gp = gradient_penalty(critic, real, fake, alpha, step, device=config.DEVICE)
87 loss_critic = (
88 -(torch.mean(critic_real) - torch.mean(critic_fake))
89 + config.LAMBDA_GP * gp
90 + (0.001 * torch.mean(critic_real ** 2))
91 )
92
93 opt_critic.zero_grad()
94 loss_critic.backward()
95 opt_critic.step()
96 # scaler_critic.scale(loss_critic).backward()
97 # scaler_critic.step(opt_critic)
98 # scaler_critic.update()
99
100 # Train Generator: max E[critic(gen_fake)] <-> min -E[critic(gen_fake)]
101 # with torch.cuda.amp.autocast():
102 gen_fake = critic(fake, alpha, step)
103 loss_gen = -torch.mean(gen_fake)
104
105 opt_gen.zero_grad()
106 loss_gen.backward()
107 opt_gen.step()
108 # scaler_gen.scale(loss_gen).backward()
109 # scaler_gen.step(opt_gen)
110 # scaler_gen.update()
111

Callers 1

mainFunction · 0.70

Calls 4

GeneratorClass · 0.90
gradient_penaltyFunction · 0.90
plot_to_tensorboardFunction · 0.90
copy_weights_toMethod · 0.80

Tested by

no test coverage detected