解决报错:ValueError: Expected input batch_size (10) to match target batch_size (1).
原做的是二分类,在训练的时候遇到了这个报错。for i, (inputs, target) in enumerate(trainloader):# forwardoutput = net(inputs)# compute lossloss = criterion(output, target)optimizer.zero_grad()# back
原做的是二分类,在训练的时候遇到了这个报错。
for i, (inputs, target) in enumerate(trainloader):
# forward
output = net(inputs)
# compute loss
loss = criterion(output, target)
optimizer.zero_grad()
# backward
loss.backward()
optimizer.step()
就这样一个简单的训练过程,可是在loss = criterion(output,target)中报错:
RuntimeError: 1D target tensor expected, multi-target not supported
print出target:
tensor([[0],
[0],
[0],
[0],
[0],
[1],
[0],
[0],
[0],
[0]])
在criterion之前将target转为1维:
target = target.view(1, -1) # 转换为1维
结果:tensor([[0, 0, 0, 0, 0, 1, 0, 0, 0, 0]])。
还是报错:ValueError: Expected input batch_size (10) to match target batch_size (1).
这里可以看到结果和一般label的形式不太一样,tensor([[]])多了一个框,一般是tensor([]),这里将target降维处理:
target = target.squeeze()
结果:tensor([0, 0, 0, 0, 0, 1, 0, 0, 0, 0])。
这样就没有报错了,至于为什么要出现这样,可能是之前在生成label的时候使用了np.array(),将label转成了二维的数组。
更多推荐
所有评论(0)