def add_noisy_gradient()

in utils.py [0:0]


def add_noisy_gradient(extr, clf, device, grad_vec, C, std, include_linear=False):
    noise = torch.randn(grad_vec.size()).to(device) * C * std
    grad_perturbed = grad_vec + noise
    extr.zero_grad()
    for param in extr.parameters():
        size = param.data.view(1, -1).size(1)
        param.grad = grad_perturbed[:size].view_as(param.data).clone()
        grad_perturbed = grad_perturbed[size:]
    if include_linear:
        clf.zero_grad()
        for param in clf.parameters():
            size = param.data.view(1, -1).size(1)
            param.grad = grad_perturbed[:size].view_as(param.data).clone()
            grad_perturbed = grad_perturbed[size:]
    return noise