我目前正在研究一个PyTorch模型,它应该可以解决多标签、二分类问题。
我的模型的最后一层是Sigmoid层,我想使用Pytorch的BCELoss。
def train_step(self, x, y):
self._optim.zero_grad()
output = self._model(x)
loss = self._crit(output, y)
loss.backward()
self._optim.step()
这里,y
是例如张量([[0,0]])
(两个标签为整数),但输出是例如张量([[0.5332,0.3933]],grad_fn=
这会导致错误:
{RuntimeError}标量类型的预期对象浮点数,但在调用_thnn_binary_cross_entropy_forward时,参数#2'target'的标量类型为Long
知道怎么解决吗?
如果您定义了一个数据集类,您应该使用如下方式返回张量浮点类型的标签:
"targets": torch.tensor(self.target[item], dtype=torch.float)