Python3.7使用Keras Dropout时UnboundLocalError的解决方法
解决Keras Dropout在Python3.7中的UnboundLocalError错误
我之前碰到过一模一样的问题,不用降级Python3.6就能搞定,这个错误的根源是numpy 1.16.x版本与Python3.7存在兼容性bug——具体是np.asscalar()函数的实现有问题,Keras调用TensorFlow时会间接触发这个函数,添加Dropout层刚好命中了这个代码路径,所以移除Dropout就正常运行了。
具体解决步骤:
升级或降级numpy版本
这个bug在numpy 1.15.4(旧版本修复)和1.17.0及以上版本(新版本修复)中都已解决,你可以二选一:- 升级到最新兼容版本:
pip install numpy>=1.17.0 --upgrade - 或者降级到稳定的旧版本:
pip install numpy==1.15.4
- 升级到最新兼容版本:
验证numpy版本
打开Python终端,输入以下命令确认版本是否正确:import numpy print(numpy.__version__)确保输出是
1.15.4或者1.17.0及以上。重新运行代码
现在再执行你的Keras模型代码,Dropout层应该能正常工作,不会再出现UnboundLocalError了。
临时替代方案(不推荐):
如果你暂时不想改动numpy版本,可以在创建Dropout层时显式指定training=False,但这样Dropout在训练过程中不会生效,仅适合临时测试:
model.add(Dropout(0.2, training=False))
优先推荐修复numpy版本的方案,这是最彻底的解决方式。
内容的提问来源于stack exchange,提问作者Haritz Laboa
相关产品推荐
相关产品推荐

