
1.4 观察模型预测结果
在训练完成以后,为了检验模型的训练结果,可以在测试集上进行验证,通过不同的评估方法来评估。一个分类模型,常见的评估方法是求分类准确率,它能衡量所有类别中预测正确的个数占所有样本的比值,直观且简单,代码如下:


训练时用的是train_loader数据集,测试时就得用另一部分的数据集test_loader。代码中用到with torch.no_grad(),是为了让模型不进行梯度求导,和model.eval()具有相同的作用。eval即evaluation模式,train即训练模式(可以看到1.3节开始训练时的model.train()),这两种模式仅仅当模型中有Dropout和BatchNorm时才会有影响。因为训练时Dropout和BatchNorm都会开启,而一般而言,测试时Dropout会被关闭,BatchNorm中的参数也是利用训练时保留的参数,所以测试时应进入评估模式。通过数据输入神经网络,得到神经网络的概率输出后,我们需要取最大值对应的索引作为预测,这里用到了torch.max函数。该函数接收两个输入,一个是数据,另一个是表示要在哪一维度操作,很明显这里输入的是概率值及第二维的1。返回两个输出,即最大的数值及最大值对应的索引。在这里我们并不关心数值多少,所以对该变量用“_”命名,这是常见的对无关变量命名的方式。将预测索引和实际索引进行对比,即可得到准确率。上述代码输出:

这是在所有类别上进行评估,并无法侧重看出哪个类别预测的好与坏,如果想观察每个类别的预测结果,可以使用如下代码。

输出结果如下:


可以看出每个类别各自的准确率。其中,数字1的准确率最高,为98% ;其次是数字0,准确率为96% ;这些数字中最低的准确率为84%,这也说明神经网络对该数据集的学习效果很好。
我们随机输入6张图并观察实际结果及模型预测结果的情况,如图1-4所示。

图1-4 结果示例