我是PyTorch和AI的新手,但是在尝试训练模型时遇到了一些麻烦。
我只创建了Dataset
和Dataloader
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
如果有人发现问题,我会很高兴,谢谢。
答案 0 :(得分:0)
我看到两个可能的问题:
1)您的数据加载器输出张量,因此您无需创建其他张量。只需这样做:
output = net(inputs)
2)您要将模型发送到device
吗?如果是,则还需要发送inputs
。如果没有,则不需要使用输出来执行此操作:
loss = criterion(output,labels)
但是,我不确定您得到的错误是否与这两点无关。考虑在代码中发布该行(而不是lib)。另外,请考虑包括有关tensor_train
和tensor_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来解决