在打印出train的loss后,想打印出validation的loss来观察网络的学习情况,然后就把val的infer结果与val的label直接放进cross entropy loss里,结果出现报错。
'numpy.ndarray' object has no attribute 'log_softmax'
经查找,交叉熵中要进行softmax计算,data和label需要满足一定的条件:
1. 预测的结果返回的值y要是 tensor,不能是numpy array,我在计算val acc的时候写了predict的函数,返回numpy array,我直接调用predict结果,所以报错;
2. label值注意wrap到varible里:
ylabel = Variable(tlabel).squeeze()
3. 开启GPU的话,数据data和label要处理:
if args.cuda and torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
4. 输入 test_loss = criterion(y, ylabel),没有报错,问题解决。