Python torch.randn_like() Examples
The following are 30
code examples of torch.randn_like().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
torch
, or try the search function
.
Example #1
Source File: samplers.py From torchsupport with MIT License | 6 votes |
def integrate(self, score, data, *args): done = False count = 0 step_count = self.steps if self.step > 0 else 10 * self.steps while not done: make_differentiable(data) make_differentiable(args) energy = score(data + self.noise * torch.randn_like(data), *args) if isinstance(energy, (list, tuple)): energy, *_ = energy gradient = ag.grad(energy, data, torch.ones_like(energy))[0] if self.max_norm: gradient = clip_grad_by_norm(gradient, self.max_norm) data = data - self.rate * gradient if self.clamp is not None: data = data.clamp(*self.clamp) data = data.detach() done = count >= step_count if self.target is not None: done = done and bool((energy.mean(dim=0) <= self.target).all()) count += 1 if (count + 1) % 500 == 0: data.random_() self.step += 1 return data
Example #2
Source File: rsgld.py From geoopt with Apache License 2.0 | 6 votes |
def step(self, closure): logp = closure() logp.backward() with torch.no_grad(): for group in self.param_groups: for p in group["params"]: if isinstance(p, (ManifoldParameter, ManifoldTensor)): manifold = p.manifold else: manifold = self._default_manifold egrad2rgrad, retr = manifold.egrad2rgrad, manifold.retr epsilon = group["epsilon"] n = torch.randn_like(p).mul_(math.sqrt(epsilon)) r = egrad2rgrad(p, 0.5 * epsilon * p.grad + n) # use copy only for user facing point copy_or_set_(p, retr(p, r)) p.grad.zero_() if not self.burnin: self.steps += 1 self.log_probs.append(logp.item())
Example #3
Source File: rfgsm.py From adversarial-attacks-pytorch with MIT License | 6 votes |
def forward(self, images, labels): r""" Overridden. """ images = images.to(self.device) labels = labels.to(self.device) loss = nn.CrossEntropyLoss() images = images + self.alpha*torch.randn_like(images).sign() for i in range(self.iters) : images.requires_grad = True outputs = self.model(images) cost = loss(outputs, labels).to(self.device) grad = torch.autograd.grad(cost, images, retain_graph=False, create_graph=False)[0] adv_images = images + (self.eps-self.alpha)*grad.sign() images = torch.clamp(adv_images, min=0, max=1).detach_() adv_images = images return adv_images
Example #4
Source File: clustering.py From torchsupport with MIT License | 6 votes |
def expectation(self): self.net.eval() with torch.no_grad(): embedding = [] batch_loader = DataLoader( self.data, batch_size=self.batch_size, shuffle=False ) for point, *_ in batch_loader: features, mean, logvar = self.net(point.to(self.device)) std = torch.exp(0.5 * logvar) sample = torch.randn_like(std).mul(std).add_(mean) latent_point = func.adaptive_avg_pool2d(sample, 1) latent_point = latent_point latent_point = latent_point.reshape(latent_point.size(0), -1) embedding.append(latent_point) embedding = torch.cat(embedding, dim=0) expectation = self.classifier(embedding) self.net.train() return expectation.to("cpu"), embedding.to("cpu")
Example #5
Source File: sliced_sm.py From ncsn with GNU General Public License v3.0 | 6 votes |
def sliced_score_estimation_vr(score_net, samples, n_particles=1): """ Be careful if the shape of samples is not B x x_dim!!!! """ dup_samples = samples.unsqueeze(0).expand(n_particles, *samples.shape).contiguous().view(-1, *samples.shape[1:]) dup_samples.requires_grad_(True) vectors = torch.randn_like(dup_samples) grad1 = score_net(dup_samples) gradv = torch.sum(grad1 * vectors) grad2 = autograd.grad(gradv, dup_samples, create_graph=True)[0] grad1 = grad1.view(dup_samples.shape[0], -1) loss1 = torch.sum(grad1 * grad1, dim=-1) / 2. loss2 = torch.sum((vectors * grad2).view(dup_samples.shape[0], -1), dim=-1) loss1 = loss1.view(n_particles, -1).mean(dim=0) loss2 = loss2.view(n_particles, -1).mean(dim=0) loss = loss1 + loss2 return loss.mean(), loss1.mean(), loss2.mean()
Example #6
Source File: sliced_sm.py From ncsn with GNU General Public License v3.0 | 6 votes |
def sliced_score_estimation(score_net, samples, n_particles=1): dup_samples = samples.unsqueeze(0).expand(n_particles, *samples.shape).contiguous().view(-1, *samples.shape[1:]) dup_samples.requires_grad_(True) vectors = torch.randn_like(dup_samples) vectors = vectors / torch.norm(vectors, dim=-1, keepdim=True) grad1 = score_net(dup_samples) gradv = torch.sum(grad1 * vectors) loss1 = torch.sum(grad1 * vectors, dim=-1) ** 2 * 0.5 grad2 = autograd.grad(gradv, dup_samples, create_graph=True)[0] loss2 = torch.sum(vectors * grad2, dim=-1) loss1 = loss1.view(n_particles, -1).mean(dim=0) loss2 = loss2.view(n_particles, -1).mean(dim=0) loss = loss1 + loss2 return loss.mean(), loss1.mean(), loss2.mean()
Example #7
Source File: sliced_sm.py From ncsn with GNU General Public License v3.0 | 6 votes |
def sliced_score_matching(energy_net, samples, n_particles=1): dup_samples = samples.unsqueeze(0).expand(n_particles, *samples.shape).contiguous().view(-1, *samples.shape[1:]) dup_samples.requires_grad_(True) vectors = torch.randn_like(dup_samples) vectors = vectors / torch.norm(vectors, dim=-1, keepdim=True) logp = -energy_net(dup_samples).sum() grad1 = autograd.grad(logp, dup_samples, create_graph=True)[0] gradv = torch.sum(grad1 * vectors) loss1 = torch.sum(grad1 * vectors, dim=-1) ** 2 * 0.5 grad2 = autograd.grad(gradv, dup_samples, create_graph=True)[0] loss2 = torch.sum(vectors * grad2, dim=-1) loss1 = loss1.view(n_particles, -1).mean(dim=0) loss2 = loss2.view(n_particles, -1).mean(dim=0) loss = loss1 + loss2 return loss.mean(), loss1.mean(), loss2.mean()
Example #8
Source File: anneal_runner.py From ncsn with GNU General Public License v3.0 | 6 votes |
def anneal_Langevin_dynamics(self, x_mod, scorenet, sigmas, n_steps_each=100, step_lr=0.00002): images = [] with torch.no_grad(): for c, sigma in tqdm.tqdm(enumerate(sigmas), total=len(sigmas), desc='annealed Langevin dynamics sampling'): labels = torch.ones(x_mod.shape[0], device=x_mod.device) * c labels = labels.long() step_size = step_lr * (sigma / sigmas[-1]) ** 2 for s in range(n_steps_each): images.append(torch.clamp(x_mod, 0.0, 1.0).to('cpu')) noise = torch.randn_like(x_mod) * np.sqrt(step_size * 2) grad = scorenet(x_mod, labels) x_mod = x_mod + step_size * grad + noise # print("class: {}, step_size: {}, mean {}, max {}".format(c, step_size, grad.abs().mean(), # grad.abs().max())) return images
Example #9
Source File: eval_wrn_ebm.py From JEM with Apache License 2.0 | 6 votes |
def sample_q(args, device, f, replay_buffer, y=None): """this func takes in replay_buffer now so we have the option to sample from scratch (i.e. replay_buffer==[]). See test_wrn_ebm.py for example. """ f.eval() # get batch size bs = args.batch_size if y is None else y.size(0) # generate initial samples and buffer inds of those samples (if buffer is used) init_sample, buffer_inds = sample_p_0(device, replay_buffer, bs=bs, y=y) x_k = t.autograd.Variable(init_sample, requires_grad=True) # sgld for k in range(args.n_steps): f_prime = t.autograd.grad(f(x_k, y=y).sum(), [x_k], retain_graph=True)[0] x_k.data += args.sgld_lr * f_prime + args.sgld_std * t.randn_like(x_k) f.train() final_samples = x_k.detach() # update replay buffer if len(replay_buffer) > 0: replay_buffer[buffer_inds] = final_samples.cpu() return final_samples
Example #10
Source File: samplers.py From torchsupport with MIT License | 5 votes |
def integrate(self, score, data, *args): for noise in self.noises: step_size = self.epsilon * (noise / self.noises[-1]) ** 2 noise = torch.ones(data.size(0), *((data.dim() - 1) * [1])).to(data.device) * noise for step in range(self.steps): gradient = score(data, noise, *args) update = step_size * gradient + np.sqrt(2 * step_size) * torch.randn_like(data) data = data + update return data
Example #11
Source File: samplers.py From torchsupport with MIT License | 5 votes |
def integrate(self, score, data, *args): for noise in self.noises: step_size = self.epsilon * (noise / self.noises[-1]) ** 2 noise = torch.ones(data.tensor.size(0), *((data.tensor.dim() - 1) * [1])).to(data.tensor.device) * noise for step in range(self.steps): gradient = score(data, noise, *args) update = step_size * gradient + np.sqrt(2 * step_size) * torch.randn_like(gradient) data.tensor = (data.tensor + update) % 6.3 return data
Example #12
Source File: dsm.py From ncsn with GNU General Public License v3.0 | 5 votes |
def dsm_score_estimation(scorenet, samples, sigma=0.01): perturbed_samples = samples + torch.randn_like(samples) * sigma target = - 1 / (sigma ** 2) * (perturbed_samples - samples) scores = scorenet(perturbed_samples) target = target.view(target.shape[0], -1) scores = scores.view(scores.shape[0], -1) loss = 1 / 2. * ((scores - target) ** 2).sum(dim=-1).mean(dim=0) return loss
Example #13
Source File: utils.py From ASNG-NAS with MIT License | 5 votes |
def __call__(self, img): sigma = self.sigmas[torch.randint(len(self.sigmas))] noise = torch.randn_like(img) * (sigma / 255.) noisy_img = img + noise noisy_img[noisy_img > 1.] = 1. noisy_img[noisy_img < 0.] = 0. return noisy_img
Example #14
Source File: samplers.py From torchsupport with MIT License | 5 votes |
def integrate(self, score, data, *args): for idx in range(self.steps): make_differentiable(data) make_differentiable(args) energy, *_ = score(data + self.noise * torch.randn_like(data), *args) gradient = ag.grad(energy, data, torch.ones(*energy.shape, device=data.device))[0] if self.max_norm: gradient = clip_grad_by_norm(gradient, self.max_norm) data = self.update(data - self.rate * gradient) return data
Example #15
Source File: samplers.py From torchsupport with MIT License | 5 votes |
def integrate(self, score, data, *args): for idx in range(self.steps): make_differentiable(data) make_differentiable(args) energy = score(data, *args) if isinstance(energy, (list, tuple)): energy, *_ = energy gradient = ag.grad(energy, data.tensor, torch.ones_like(energy))[0] if self.max_norm: gradient = clip_grad_by_norm(gradient, self.max_norm) data.tensor = data.tensor - self.rate * gradient + self.noise * torch.randn_like(data.tensor) if self.clamp is not None: data.tensor = data.tensor.clamp(*self.clamp) data.tensor = data.tensor % (2 * np.pi) return data
Example #16
Source File: vae.py From torchsupport with MIT License | 5 votes |
def sample_prior(self, encoding): return torch.randn_like(encoding)
Example #17
Source File: example_differential_privacy.py From backpack with MIT License | 5 votes |
def step(self): """Performs a single optimization step. The function expects the gradients to have been computed by BackPACK and the parameters to have a ``batch_l2`` and ``grad_batch`` attribute. """ l2_norms_all_params_list = [] for group in self.param_groups: for p in group["params"]: l2_norms_all_params_list.append(p.batch_l2) l2_norms_all_params = torch.stack(l2_norms_all_params_list) total_norms = torch.sqrt(torch.sum(l2_norms_all_params, dim=0)) scaling_factors = torch.clamp_max(total_norms / self.max_norm, 1.0) for group in self.param_groups: for p in group["params"]: clipped_grads = p.grad_batch * make_broadcastable( scaling_factors, p.grad_batch ) clipped_grad = torch.sum(clipped_grads, dim=0) noise_magnitude = self.stddev * self.max_norm noise = torch.randn_like(clipped_grad) * noise_magnitude perturbed_update = clipped_grad + noise p.data.add_(-self.lr * perturbed_update) # %% # Running and plotting # -------------------- # We can now run our optimizer on MNIST.
Example #18
Source File: vae.py From world-models with MIT License | 5 votes |
def forward(self, x): # pylint: disable=arguments-differ mu, logsigma = self.encoder(x) sigma = logsigma.exp() eps = torch.randn_like(sigma) z = eps.mul(sigma).add_(mu) recon_x = self.decoder(z) return recon_x, mu, logsigma
Example #19
Source File: samplers.py From torchsupport with MIT License | 5 votes |
def integrate(self, score, data, *args): for idx in range(self.steps): make_differentiable(data) make_differentiable(args) energy = score(data, *args) if isinstance(energy, (list, tuple)): energy, *_ = energy gradient = ag.grad(energy, data, torch.ones_like(energy))[0] if self.max_norm: gradient = clip_grad_by_norm(gradient, self.max_norm) data = data - self.rate * gradient + self.noise * torch.randn_like(data) if self.clamp is not None: data = data.clamp(*self.clamp) return data
Example #20
Source File: supervised_topic_model.py From causal-text-embeddings with MIT License | 5 votes |
def reparameterize(self, mu, logvar): """Returns a sample from a Gaussian distribution via reparameterization. """ if self.training: std = torch.exp(0.5 * logvar) eps = torch.randn_like(std) return eps.mul_(std).add_(mu) else: return mu
Example #21
Source File: BCQ.py From BCQ with MIT License | 5 votes |
def forward(self, state, action): z = F.relu(self.e1(torch.cat([state, action], 1))) z = F.relu(self.e2(z)) mean = self.mean(z) # Clamped for numerical stability log_std = self.log_std(z).clamp(-4, 15) std = torch.exp(log_std) z = mean + std * torch.randn_like(std) u = self.decode(state, z) return u, mean, std
Example #22
Source File: test_loss.py From nussl with MIT License | 5 votes |
def test_permutation_invariant_loss_tf(): n_batch = 10 n_time = 400 n_freq = 129 n_sources = 4 sources = torch.randn(n_batch, n_time, n_freq, n_sources) LossPIT = ml.train.loss.PermutationInvariantLoss( loss_function=ml.train.loss.L1Loss()) LossL1 = ml.train.loss.L1Loss() noise_amount = [0.001, .01, .05, 1.0] for n in noise_amount: permuted = [] noisy = sources + n * torch.randn_like(sources) _loss_a = LossL1(noisy, sources).item() for i in range(n_batch): p = random.choice(list(permutations(range(n_sources)))) permuted_batch = noisy[i, ..., list(p)].unsqueeze(0) permuted.append(permuted_batch) permuted = torch.cat(permuted, dim=0) _loss_b = LossPIT(permuted, sources).item() assert np.allclose(_loss_a, _loss_b, atol=1e-6)
Example #23
Source File: set_yeast_ebm.py From torchsupport with MIT License | 5 votes |
def forward(self, image, condition): image = image.view(-1, 3, 64, 64) out = self.input_process(self.input(image)) mean, logvar = self.condition(condition) #distribution = Normal(mean, torch.exp(0.5 * logvar)) sample = mean + torch.randn_like(mean) * torch.exp(0.5 * logvar)#distribution.rsample() cond = self.postprocess(sample) cond = torch.repeat_interleave(cond, 5, dim=0) result = self.combine(torch.cat((out, cond), dim=1)) return result, (mean, logvar)
Example #24
Source File: dsm.py From ncsn with GNU General Public License v3.0 | 5 votes |
def dsm(energy_net, samples, sigma=1): samples.requires_grad_(True) vector = torch.randn_like(samples) * sigma perturbed_inputs = samples + vector logp = -energy_net(perturbed_inputs) dlogp = sigma ** 2 * autograd.grad(logp.sum(), perturbed_inputs, create_graph=True)[0] kernel = vector loss = torch.norm(dlogp + kernel, dim=-1) ** 2 loss = loss.mean() / 2. return loss
Example #25
Source File: sliced_sm.py From ncsn with GNU General Public License v3.0 | 5 votes |
def anneal_sliced_score_estimation_vr(scorenet, samples, labels, sigmas, n_particles=1): used_sigmas = sigmas[labels].view(samples.shape[0], *([1] * len(samples.shape[1:]))) perturbed_samples = samples + torch.randn_like(samples) * used_sigmas dup_samples = perturbed_samples.unsqueeze(0).expand(n_particles, *samples.shape).contiguous().view(-1, *samples.shape[ 1:]) dup_labels = labels.unsqueeze(0).expand(n_particles, *labels.shape).contiguous().view(-1) dup_samples.requires_grad_(True) # use Rademacher vectors = torch.randn_like(dup_samples) grad1 = scorenet(dup_samples, dup_labels) gradv = torch.sum(grad1 * vectors) grad2 = autograd.grad(gradv, dup_samples, create_graph=True)[0] grad1 = grad1.view(dup_samples.shape[0], -1) loss1 = torch.sum(grad1 * grad1, dim=-1) / 2. loss2 = torch.sum((vectors * grad2).view(dup_samples.shape[0], -1), dim=-1) loss1 = loss1.view(n_particles, -1).mean(dim=0) loss2 = loss2.view(n_particles, -1).mean(dim=0) loss = (loss1 + loss2) * (used_sigmas.squeeze() ** 2) return loss.mean(dim=0)
Example #26
Source File: sliced_sm.py From ncsn with GNU General Public License v3.0 | 5 votes |
def partial_sliced_score_matching(energy_net, samples, noise=None, detach=False, noise_type='radermacher'): samples.requires_grad_(True) if noise is None: vectors = torch.randn_like(samples) if noise_type == 'radermacher': vectors = vectors.sign() elif noise_type == 'gaussian': pass else: raise ValueError("Noise type not implemented") else: vectors = noise logp = -energy_net(samples).sum() grad1 = autograd.grad(logp, samples, create_graph=True)[0] gradv = torch.sum(grad1 * vectors) loss1 = torch.norm(grad1, dim=-1) ** 2 * 0.5 if detach: loss1 = loss1.detach() grad2 = autograd.grad(gradv, samples, create_graph=True)[0] loss2 = torch.sum(vectors * grad2, dim=-1) if detach: loss2 = loss2.detach() loss = (loss1 + loss2).mean() return loss, grad1, grad2
Example #27
Source File: sliced_sm.py From ncsn with GNU General Public License v3.0 | 5 votes |
def single_sliced_score_matching(energy_net, samples, noise=None, detach=False, noise_type='radermacher'): samples.requires_grad_(True) if noise is None: vectors = torch.randn_like(samples) if noise_type == 'radermacher': vectors = vectors.sign() elif noise_type == 'sphere': vectors = vectors / torch.norm(vectors, dim=-1, keepdim=True) * np.sqrt(vectors.shape[-1]) elif noise_type == 'gaussian': pass else: raise ValueError("Noise type not implemented") else: vectors = noise logp = -energy_net(samples).sum() grad1 = autograd.grad(logp, samples, create_graph=True)[0] gradv = torch.sum(grad1 * vectors) loss1 = torch.sum(grad1 * vectors, dim=-1) ** 2 * 0.5 if detach: loss1 = loss1.detach() grad2 = autograd.grad(gradv, samples, create_graph=True)[0] loss2 = torch.sum(vectors * grad2, dim=-1) if detach: loss2 = loss2.detach() loss = (loss1 + loss2).mean() return loss, grad1, grad2
Example #28
Source File: anneal_runner.py From ncsn with GNU General Public License v3.0 | 5 votes |
def anneal_Langevin_dynamics_inpainting(self, x_mod, refer_image, scorenet, sigmas, n_steps_each=100, step_lr=0.000008): images = [] refer_image = refer_image.unsqueeze(1).expand(-1, x_mod.shape[1], -1, -1, -1) refer_image = refer_image.contiguous().view(-1, 3, 32, 32) x_mod = x_mod.view(-1, 3, 32 ,32) half_refer_image = refer_image[..., :16] with torch.no_grad(): for c, sigma in tqdm.tqdm(enumerate(sigmas), total=len(sigmas), desc="annealed Langevin dynamics sampling"): labels = torch.ones(x_mod.shape[0], device=x_mod.device) * c labels = labels.long() step_size = step_lr * (sigma / sigmas[-1]) ** 2 corrupted_half_image = half_refer_image + torch.randn_like(half_refer_image) * sigma x_mod[:, :, :, :16] = corrupted_half_image for s in range(n_steps_each): images.append(torch.clamp(x_mod, 0.0, 1.0).to('cpu')) noise = torch.randn_like(x_mod) * np.sqrt(step_size * 2) grad = scorenet(x_mod, labels) x_mod = x_mod + step_size * grad + noise x_mod[:, :, :, :16] = corrupted_half_image # print("class: {}, step_size: {}, mean {}, max {}".format(c, step_size, grad.abs().mean(), # grad.abs().max())) return images
Example #29
Source File: toy_runner.py From ncsn with GNU General Public License v3.0 | 5 votes |
def anneal_langevin_dynamics(score, init, sigmas, lr=0.1, n_steps_each=100): for sigma in sigmas: for i in range(n_steps_each): current_lr = lr * (sigma / sigmas[-1]) ** 2 init = init + current_lr / 2 * score(init, sigma).detach() init = init + torch.randn_like(init) * np.sqrt(current_lr) return init
Example #30
Source File: hgnn.py From hgraph2graph with MIT License | 5 votes |
def rsample(self, z_vecs, W_mean, W_var, perturb=True): batch_size = z_vecs.size(0) z_mean = W_mean(z_vecs) z_log_var = -torch.abs( W_var(z_vecs) ) kl_loss = -0.5 * torch.sum(1.0 + z_log_var - z_mean * z_mean - torch.exp(z_log_var)) / batch_size epsilon = torch.randn_like(z_mean).cuda() z_vecs = z_mean + torch.exp(z_log_var / 2) * epsilon if perturb else z_mean return z_vecs, kl_loss