Python 基于gpu的问题训练模型

Python 基于gpu的问题训练模型,python,pytorch,Python,Pytorch,我试图在PyTorch中实现基本MNIST GAN的鉴别器。当我在CPU上运行培训时,它可以正常工作,并提供所需的输出。但是,当我在GPU上运行它时,它会显示一个运行时错误。我正在粘贴下面我的模型和培训的代码,以及我为尝试在GPU上运行培训所做的修改 dev = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") def preprocess(x): return x.view(-1,1,

我试图在PyTorch中实现基本MNIST GAN的鉴别器。当我在CPU上运行培训时,它可以正常工作,并提供所需的输出。但是,当我在GPU上运行它时,它会显示一个运行时错误。我正在粘贴下面我的模型和培训的代码,以及我为尝试在GPU上运行培训所做的修改

dev = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")

def preprocess(x):
    return x.view(-1,1,28,28).to(dev)

discriminator = nn.Sequential(
    Lambda(preprocess),
    nn.Conv2d(1,64,3,stride=2,padding=1),
    nn.LeakyReLU(negative_slope=0.2),
    nn.Dropout(0.4),
    nn.Conv2d(64,64,3,stride=2,padding=1),
    nn.LeakyReLU(negative_slope=0.2),
    nn.Dropout(0.4),
    Lambda(lambda x:x.view(x.size(0),-1)),
    nn.Linear(3136,1),
    nn.Sigmoid()
)
loss = nn.BCELoss()
opt = optim.Adam(discriminator.parameters(),lr = 0.002)

discriminator.to(dev)
现在运行
train\u鉴别器(鉴别器、数据集、opt)
我得到了以下我无法理解的错误

---------------------------------------------------------------------------
运行时错误回溯(上次最近调用)
在里面
---->1列鉴别器(鉴别器、数据集、opt)
列内鉴别器(模型、数据集、opt、n\u iter、n\u批次)
3适用于范围内的i(n_iter):
4 X_real,y_real=生成_real_样本(数据集,半批)
---->5误差=损失(模型(X_实际值),y_实际值)
6错误向后()
7 X_-fake,y_-fake=生成_-fake_样品(半批)
~/environments/workspace/lib/python3.7/site-packages/torch/nn/modules/module.py in\uuuuu调用(self,*input,**kwargs)
530结果=self.\u slow\u forward(*输入,**kwargs)
531其他:
-->532结果=自我转发(*输入,**kwargs)
533用于钩住自身。\u向前\u钩住.values():
534钩子结果=钩子(自身、输入、结果)
前进中的~/environments/workspace/lib/python3.7/site-packages/torch/nn/modules/loss.py(自我、输入、目标)
496
497 def前进(自身、输入、目标):
-->498返回F.binary\u cross\u熵(输入,目标,权重=自身权重,缩减=自身缩减)
499
500
二进制交叉熵中的~/environments/workspace/lib/python3.7/site-packages/torch/nn/functional.py(输入、目标、重量、大小、平均、减少、减少)
2075
2076返回火炬。二元交叉熵(
->2077输入、目标、重量、减少(枚举)
2078
2079
RuntimeError:应为设备类型cuda的对象,但在调用_thnn_binary_cross_entropy_forward时为参数#2'target'获取了设备类型cpu

如果有人能提出解决此问题所需的任何更改,我将不胜感激。

根据错误消息,基本事实不在GPU中:

RuntimeError:应为设备类型cuda的对象,但在调用_thnn_binary_cross_entropy_forward时为参数#2'target'获取了设备类型cpu


哦,好的。我做了必要的改变,效果很好。非常感谢@HarshSulakhe,你可以指出这个答案是正确的,这样你就可以帮助其他人从错误信息中理解/不理解什么?你做过调试吗?请提供一份报告。
def train_discriminator(model, dataset,opt, n_iter=100, n_batch=256):
    half_batch = int(n_batch / 2)
    for i in range(n_iter):
        X_real, y_real = generate_real_samples(dataset, half_batch)
        error = loss(model(X_real),y_real)
        error.backward()
        X_fake, y_fake = generate_fake_samples(half_batch)
        error = loss(model(X_fake),y_fake)
        error.backward()
        opt.step()