简体   繁体   中英

In Pytorch, when transferring to GPU, I get an error “is on CPU, but expected to be on GPU”

Error example: "Tensor for 'out' is on CPU, Tensor for argument #1 'self' is on CPU, but expected them to be on GPU". I was stuck on the tutorial for classification:

https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html

Note: The code is for regression.

Code is below:

class Net(nn.Module):
    def __init__(self, num_features, size_hidden_layer, n_hidden_layer):
        super(Net, self).__init__()
        self.size_hidden_layer = size_hidden_layer
        self.n_hidden_layer = n_hidden_layer
        self.hidden_layers = list()
        self.hidden_layers.append(nn.Linear(num_features, size_hidden_layer))
        for _ in range(n_hidden_layer-1):
            self.hidden_layers.append(nn.Linear(size_hidden_layer, size_hidden_layer))
        self.last_layer = nn.Linear(size_hidden_layer, 1)

    def forward(self, x):
        for i in range(self.n_hidden_layer):
            x = torch.relu(self.hidden_layers[i](x))
        return self.last_layer(x)

What does the tutorial section not mention is that the parameters have to be wrapped in order to be read by the GPU. For example, look at __init__ where normal and neural network layers are wrapped in nn.Sequential .

class Net(nn.Module):
    def __init__(self, num_features, size_hidden_layer, n_hidden_layer):
        super(Net, self).__init__()
        self.size_hidden_layer = size_hidden_layer
        self.n_hidden_layer = n_hidden_layer
        hidden_layers = list()
        hidden_layers.append(nn.Linear(num_features, size_hidden_layer))
        for _ in range(n_hidden_layer-1):
            hidden_layers.append(nn.Linear(size_hidden_layer, size_hidden_layer))
        self.hidden_layers = nn.Sequential(*hidden_layers)
        self.last_layer = nn.Linear(size_hidden_layer, 1)

    def forward(self, x):
        for i in range(self.n_hidden_layer):
            x = torch.relu(self.hidden_layers[i](x))
        return self.last_layer(x)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM