项目地址:project_path
测试函数:
模型在测试集上的准确率为:23.96%(向下取整)
模型在测试集上的准确率为:18.24%(向上取整)
之所以这样设置,是因为网络是单层神经网络(784——>1),模型仅输出1个值
import paddle
import paddle.nn.functional as F
# 加载测试集 batch_size 设为 1
test_loader = paddle.io.DataLoader(paddle.vision.datasets.MNIST(mode='test'),
batch_size=1,
shuffle=False)
def test(model):
# 评估模式
model.eval()
correct = 0
total = len(test_loader.dataset)
with paddle.no_grad():
for batch_id, data in enumerate(test_loader()):
images = norm_img(data[0]).astype('float32')
labels = data[1].astype('float32')
# 前向计算
predicts = model(images)
# 计算准确率
predict_labels = paddle.floor(predicts) # 向下取整,向上换成ceil
correct += paddle.sum(paddle.cast(predict_labels == labels, 'int')).numpy()
accuracy = correct / total
print("模型在测试集上的准确率为:{:.2%}".format(accuracy[0]))
# 加载模型并进行测试
model = MNIST()
params_file_path = 'mnist.pdparams'
param_dict = paddle.load(params_file_path)
model.load_dict(param_dict)
test(model)
总结:模型性能的缺陷,导致一层神经网络无法很好学习到手写数字的特征,随机性较大,因此,考虑加深神经网络或者设计更加复杂的模型。