While the to() operation works recursively on all submodules in your model, you have to reassign the tensor to make it work. In particular, the noise method will return a CPUTensor, since n was never reassigned to the CUDATensor.
Also, Variables are deprecated since PyTorch 0.4, so you can use tensors now 
def noise(size):
    '''
    Generates a 1-d vector of gaussian sampled random values
    '''
    n = torch.randn(size, 100, device='cuda:0')
    return n