Python多变量接收函数返回值语法及问题排查方法咨询
test_loss, test_accuracy = model.evaluate(test_dataset,steps=math.ceil(num_test_examples/32))
问题1:上述Python语法的具体含义是什么?
这段代码是Python序列解包语法和TensorFlow/Keras模型评估逻辑的结合,具体含义拆分如下:
- 右侧的
model.evaluate是TensorFlow/Keras框架下深度学习模型的内置评估方法,作用是基于输入的测试数据集test_dataset,计算模型在未见过的测试数据上的损失值、准确率等泛化能力指标 - 参数
steps=math.ceil(num_test_examples/32)用来指定评估过程的迭代步数:32是深度学习训练/评估常用的批次大小(batch size,即每步处理32条样本),math.ceil是向上取整函数,确保测试集总数不是32的整数倍时,所有样本都能被覆盖不会遗漏 - 左侧的
test_loss, test_accuracy用了Python的序列解包赋值语法,不需要手动索引取值,直接把方法返回的多个结果按顺序赋值给对应变量
问题2:代码执行完成后,test_loss和test_accuracy两个变量是否都存储了model.evaluate(...)的返回值?
是的。
默认情况下,Keras的model.evaluate会返回一个列表,第一个元素是测试集的损失值,后续元素对应你编译模型时在metrics参数里指定的评估指标。只要你编译模型时配置了model.compile(metrics=['accuracy']),该方法就会返回两个值,刚好对应这里的两个变量,两个变量都会存储对应返回结果。
如果编译时指定了更多评估指标,返回列表的长度会对应增加,解包时的变量数量需要和返回值数量完全一致,否则会抛出赋值异常。
问题3:若遇到此类不理解的Python语法,正确的排查思路是什么?是逐篇查阅官方文档直至找到对应内容,还是优先咨询有经验的开发者?
建议按以下优先级排查,平衡效率和准确率:
- 首先拆分不理解的点:区分是Python基础语法(比如这里的多变量解包赋值)还是第三方库的API用法。如果是基础语法,优先查Python官方基础教程,常见基础知识点10分钟内就能找到明确答案
- 如果是第三方库的API(比如这里的
model.evaluate),优先查对应库的官方API文档,官方文档会明确标注参数含义、返回值结构、示例代码,准确率远高于零散的第三方博客,不会被错误信息误导 - 如果查完文档仍有歧义,或者运行时报的错不符合文档描述,可以先搜技术社区的历史提问,90%的常见问题都有现成的解决方案
- 以上步骤都试过还是无法解决时,再咨询有经验的开发者,提问时同步附上你已经查过的资料、试过的方案、具体的报错信息,能大幅提升沟通效率
没有必要逐篇死磕文档浪费时间,也不建议完全不做前置排查就直接咨询他人。
内容的提问来源于stack exchange,提问作者Wintermute
相关产品推荐
相关产品推荐

