1、loss保持不变,始终稳定在0.208
1.1在计算loss时数据维数不匹配
from torch import nn
loss = nn.CrossEntropyLoss(outputs, labels)
经过查看可发现outputs.shape为torch.Size([64, 64, 10]) 而labels.shape为torch.Size([64, 10])
1.1.1使用view时报错:
RuntimeError: view size is not compatible with input tensor’s size and stride (at least one dimension spans across two contiguous subspaces). Use .reshape(…) instead.
更改:
将变量先转为contiguous ,再进行view:
targets.contiguous().view(targets.size(0)*targets.size(1),-1)
或直接
targets.contiguous()
target.view(target.size(0), -1)
1.1.2 更改完view错误后
Expected input batch_size (4096) to match target batch_size (64)
outputs.shape: torch.Size([4096, 10])
labels.shape: torch.Size([64, 10])
查看标签的过程中,发现pytorch和TensorFlow之间的计算差异 https://blog.csdn.net/weixin_39190382/article/details/114433884 TensorFlow Pytorch 修改参数使得
outputs.shape: torch.Size([64, 10])
labels.shape: torch.Size([64])
至此代码能够正常运行,且loss能够发生变化
2、输出test准确率为0
2.1 解决方法1(未用上)
原因是gao的代码是pytorch3迁移过来的,很多地方使用了sum(pred_y== target)来求训练集的精度,但是没有转成numpy这里就会为0,因为torch数据本身不支持这种计算方式,所以改成sum(np.array(pred_y)== np.array(target.data.cpu()))即可使训练集正常运行
链接: 原文链接
2.2 更改predicted的计算方式
predicted = torch.max(outputs.data,1)[1]
correct += (predicted == labels).sum()
|