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?