Hi,
I am new in Pytroch. Implementing a VAE example, I got the error message “expected backend CPU but got backend GPU”. I build the network within a class (nn.Module). I solve the error passing the device as a parameter during the instantiation of the VAE class.
In the forward method, originally I use:
def forward(self, x):
   if x.dim() > 2:
       x = x.view(-1, 28 * 28)

    batch_size = x.size(0)
    means, log_var = self.encoder(x)
    std = log_var.mul(0.5).exp_()
    eps = torch.randn([batch_size, self.latent_size])
    z = ((eps * std) + means) 
    recon_x = self.decoder(z)

    return recon_x, means, log_var, z

After passing the device as parameters, I modify eps and z as follow:
eps = torch.randn([batch_size, self.latent_size]).to(self.device)
z = ((eps * std) + means).to(self.device)

Although, this way makes the code works correctly in a GPU or CPU. I would like to know if it is a correct practice or if there is the best way to do it.
Best.