-
关键字:
module
model属性
-
问题描述:利用波士顿房价数据集进行模型的训练和预测时,使用了uci_housing.model(),uci_housing模块封装了该数据集的相关操作,但却报出
'module' object has no attribute 'model'
错误,module对象没有model属性。 -
报错代码段:
paddle.infer(
output_layer = y_predict,
parameters = paddle.dataset.uci_housing.model(), #报错
input = [item for item in paddle.dataset.uci_housing.test()()]
)
-
报错截图:
-
报错输出:
I0116 13:53:48.957136 15297 Util.cpp:166] commandline: --use_gpu=False --trainer_count=1
Traceback (most recent call last):
File "housing.py", line 13, in <module>
parameters=paddle.dataset.uci_housing.model(),
AttributeError: 'module' object has no attribute 'model'
-
复现方式:
使用旧版本的paddlepaddle编写代码,训练波士顿房价数据,使用了paddle.dataset.uci_housing.model(),出现'module' object has no attribute 'model'
错误 -
解决方案:
PaddlePaddle通过uci_housing模块引入了数据集合UCI Housing Data Set,并且在该模块中封装了数据的下载以及预处理,其下载数据会保存在下载数据保存在~/.cache/paddle/dataset/uci_housing/housing.data,而预处理方法会因版本不同而略有不同,旧版本的PaddlePaddle可能会出现'module' object has no attribute 'model'
报错,请尝试安装最新版本的PaddlePaddle。PaddlePaddle 0.15.0 版本不会遇到module对象没有model属性的问题。 -
问题分析:
在开发过程中,经常会遇到'module' object has no attribute 'xxx'
的问题,其原因报错信息说的很清楚,就是某个对象没有某个属性,这个错误出现的通常原因就是没有正确使用某个对象,造成错误写法的原因很有可能是这种写法是该对象旧的用法,而最新的对象已经删除了这个属性了,此时再用久的方法来使用该对象就会出现'module' object has no attribute 'xxx'
的问题,最简单的解决方式就是看一下官方文档了解该对象最新的用法。 -
问题拓展:
'module' object has no attribute 'xxx'
这类问题其实就是使用方式不当的问题,以后遇到第三库报错,遇到缺少什么什么通常都是使用问题,这时就要回顾一下自己使用时该库的代码,注意使用第三库的版本以及python字符编码等问题,通常阅读一下最新的官方文本或自己百度一下都可以找到相应的解决方案。 -
问题研究:
这类问题算是经验型问题,只要遇到过,有印象,解决起来都类似的方式,因为某对象缺失某属性是硬性问题,如果是自己编写的对象,那么就编写上相应的属性,如果是第三库,那么通常就是该库的用法发生了变动,你使用的方式不是最新的方式,通过最新的方式使用则可,或者降级自己的第三库来配合自己的代码,至于这两种方法选择使用哪一种,主要看自己的“代价”,即该代码方便还是还旧的库使用方便,建议修改代码,使用新的第三方库,让代码更加优雅点。