在pytorch中训练模型时,为什么会出现问题?

时间:2020-02-25 18:16:46

标签: artificial-intelligence pytorch

我是PyTorch和AI的新手,但是在尝试训练模型时遇到了一些麻烦。

我只创建了DatasetDataloader

    train_dataset = TensorDataset(tensor_train,tensor_label)
    train_dataloader = DataLoader(train_dataset,batch_size=32,shuffle=True)

然后我的标准和优化器

    criterion = nn.CrossEntropyLoss()

    optimiser=optim.Adam(net.parameters(),lr=0.2)

我尝试用

进行训练
    for epoch in range(10):
           for data in train_dataloader:
                inputs,labels = data
                output = net(torch.Tensor(inputs))
                loss = criterion(output,labels.to(device))
                optimiser.zero_grad()
                loss.backward()
                optimiser.step()

但是我遇到了这个错误

    d:\py\lib\site-packages\torch\nn\modules\module.py in <lambda>(t)
321             Module: self
322         """
    --> 323         return self._apply(lambda t: t.type(dst_type))
324 
325     def float(self):

TypeError: dtype must be a type, str, or dtype object

如果有人发现问题,我会很高兴,谢谢。

2 个答案:

答案 0 :(得分:0)

我看到两个可能的问题:

1)您的数据加载器输出张量,因此您无需创建其他张量。只需这样做:

output = net(inputs)

2)您要将模型发送到device吗?如果是,则还需要发送inputs。如果没有,则不需要使用输出来执行此操作:

loss = criterion(output,labels)

但是,我不确定您得到的错误是否与这两点无关。考虑在代码中发布该行(而不是lib)。另外,请考虑包括有关tensor_traintensor_label

的更多信息

答案 1 :(得分:0)

可以回复,但是问题出在另一件事上 我正在创建这样的模型

class Perceptron(nn.Module):
     def __init__(self):
         super(Perceptron,self).__init__()
         self.type = nn.Linear(4,3)
     def forward(self,x):
          return self.type(x)
net = Perceptron().to(device)

并且nn.Module已经获取类型属性,这就是为什么我遇到此错误(我的事情),然后我通过self.anythingElseThanType更改self.type来解决