In order to add noise to the XNOR-Net, I need to modify the trained weights which contains only 1 and -1. So I think the problem is how to generate a tensor with random number of 1 and -1, and then multiply this tensor with the trained weights. The solution of mine is following:
def add_noise_to_weights(m): s = m.data.size() n = m.data.nelement() r = round(n*0.01) #0.01 is the noise ratio mask = -torch.ones([1, r]).type_as(m.data) neg_mask = torch.ones([1, n-r]).type_as(m.data) t = torch.cat((mask, neg_mask),1).reshape(s) idx = torch.randperm(t.nelement()) t = t.view(-1)[idx].view(t.size()) m.data = m.data.mul(t) return m
Despite it works, the code is too complicated, so could you guys have some simply solutions?