--> 120 cur_acc=torch.sum(labels==pred1)/preds.shape[0] 121 optimizer.zero_grad() 122 cur_loss.backward() TypeError: sum(): argument 'input' (position 1) must be Tensor, not bool
时间: 2023-11-27 08:54:40 浏览: 51
这个错误是因为 `labels==pred1` 的结果是一个布尔类型的 Tensor,而 `torch.sum()` 函数的参数必须是一个 Tensor 对象,不能是布尔类型。可以通过将 `labels==pred1` 转换为整型 Tensor 来解决这个问题,例如:
```
cur_acc = torch.sum((labels == pred1).to(torch.float32)) / preds.shape[0]
```
这里使用了 `to()` 函数将布尔类型的 Tensor 转换为浮点型的 Tensor,才能进行求和操作。
相关问题
133 cur_loss=F.cross_entropy(preds,labels) 134 _,pred1=torch.max(preds,axis=1) --> 135 cur_acc=torch.sum(lables==pred1)/preds.shape[0] 136 optimizer.zero_grad() 137 cur_loss.backward() NameError: name 'lables' is not defined
这个错误是因为在第 135 行代码中,`lables` 变量没有定义。很可能是一个拼写错误,应该将其更正为 `labels`。
正确的代码应该是:
```
133 cur_loss=F.cross_entropy(preds,labels)
134 _,pred1=torch.max(preds,axis=1)
135 cur_acc=torch.sum(labels==pred1)/preds.shape[0]
136 optimizer.zero_grad()
137 cur_loss.backward()
```
报错Cell In[2], line 120, in train(dataloader, model, loss_fn, optimizer) 118 cur_loss=F.cross_entropy(preds,labels) 119 pred1=torch.max(preds,axis=1) --> 120 cur_acc=torch.sum((labels==pred1).to(torch.float32))/preds.shape[0] 121 optimizer.zero_grad() 122 cur_loss.backward() AttributeError: 'bool' object has no attribute 'to'
这个错误可能是因为 `(labels==pred1)` 返回了一个布尔类型的张量,而 `to()` 方法只能用于张量类型的转换。可以尝试将 `(labels==pred1)` 改为 `torch.eq(labels, pred1)`,这样返回的就是一个张量,就可以使用 `to()` 方法进行类型转换了。例如:
```
cur_acc=torch.sum(torch.eq(labels,pred1).to(torch.float32))/preds.shape[0]
```
另外,需要注意 `torch.max(preds, axis=1)` 返回的是一个元组,包含两个张量,第一个张量是最大值,第二个张量是最大值对应的索引。如果需要获取最大值对应的索引,可以使用 `torch.max(preds, axis=1)[1]`。
阅读全文