baselines示例程序train_cartpole.py的ImportError


Posted in Python onMay 20, 2022

问题导出

为了更方便地实现自己的一些想法,我最终还是向OpenAI的baselines屈服了,因为自己的一些实现总是难与各大论文给出的结果进行对比。于是我今天安装了baselines,其中还是有一些坑的,这里主要介绍在安装完成之后,运行示例时cartpole.py所遇到的坑,它叫做ImportError。

ImportError

我们先cd到文件夹baselines/baselines/deepq/experiments下,然后运行下面语句:

$ python3 train_cartpole.py

然后就报错了……

baselines示例程序train_cartpole.py的ImportError

从图中我们可以看出,在文件train_cartpole.py中有如下语句:

from baselines import deepq

而在我们导入deepq的时候,将会执行deepq文件夹下的__init__.py文件,于是我们打开这一文件:

from baselines.deepq import models  # noqa
from baselines.deepq.build_graph import build_act, build_train  # noqa
from baselines.deepq.simple import learn, load  # noqa
from baselines.deepq.replay_buffer import ReplayBuffer, PrioritizedReplayBuffer  # noqa
def wrap_atari_dqn(env):
    from baselines.common.atari_wrappers import wrap_deepmind
    return wrap_deepmind(env, fram_stack=True, scale=True)

在报错中,提到了上面的这一语句:

from baselines.deepq.simple import learn, load  # noqa

同时,报错中提到,在simple.py中有:

from baselines import deepq

问题渐渐明朗了,在我们import deepq的时候,将要执行__init__.py文件,这个文件将会从simple.py中把learn和load导入到deepq的命名空间下。而simple.py又想要import deepq,这也就构成了所谓的“Looping Import”。那我们应该如何解决呢?

我们先将simple.py中的下面这条语句注释掉:

from baselines import deepq

然后运行:

$ python3 train_cartpole.py

发现又出错了:

baselines示例程序train_cartpole.py的ImportError

不过这个错误是肯定会出的,我们无缘无故注释掉了人家写的一个import语句,能不错嘛。不过不要慌,我们继续分析,为什么这里要import deepq呢?就是为了执行下面的语句:

act = deepq.build_act(**act_params)
...
act, train, update_target, debug = deepq.build_train(...)

这里因为我们在__init__.py中将build_act和build_train方法导入到了deepq的命名空间下,所以这里可以直接在deepq的命名空间中去调用build_act和build_action。

如果我们要在simple.py文件中使用deepq.build_act的话,那么必然要在simple.py中导入deepq,而且也需要在__init__.py中导入simple,这么一来,就会出现“Looping Import”问题了。

解决方案

所以我们选择的解决方案是:

a) 将__init__.py中的下列语句注释掉:

from baselines.deepq.build_graph import build_act, build_train # noqa

b) 将simple.py中的下列语句换掉:

from baselines import deepq

换为:

from baselines.deepq.build_graph import build_act, build_train

c) 修改下列语句:

act = deepq.build_act(**act_params)
...
act, train, update_target, debug = deepq.build_train(...)

改为:

act = build_act(**act_params)
...
act, train, update_target, debug = build_train(...)

d) 运行:

$ python3 train_cartpole.py

OK,问题解决。

对了,在OpenAI Baselines里面,有一些代码用到了Python3.6的特性,比如直接(None, *tuple),这在Python3.4是不允许的,所以建议大家直接安装conda环境,并装好Python3.6。

以上就是baselines示例程序train_cartpole.py的ImportError的详细内容!

Python 相关文章推荐
编写简单的Python程序来判断文本的语种
Apr 07 Python
基于python实现微信模板消息
Dec 21 Python
python学习基础之循环import及import过程
Apr 22 Python
通过字符串导入 Python 模块的方法详解
Oct 27 Python
python 多维高斯分布数据生成方式
Dec 09 Python
python 实现简单的FTP程序
Dec 27 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
python使用建议与技巧分享(一)
Aug 17 Python
用基于python的appium爬取b站直播消费记录
Apr 17 Python
Python如何导出导入所有依赖包详解
Jun 08 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
python通过新建环境安装tfx的问题
May 20 #Python
Python使用BeautifulSoup4修改网页内容
May 20 #Python
python标准库ElementTree处理xml
May 20 #Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
May 20 #Python
Python Flask实现进度条
May 11 #Python
Python PIL按比例裁剪图片
May 11 #Python
python 学习GCN图卷积神经网络
May 11 #Python
You might like
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
php中socket通信机制实例详解
2015/01/03 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
javascript中tostring()和valueof()的用法及两者的区别
2015/11/16 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
2017/06/13 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
javascript实现留言板功能
2020/02/08 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
详解Python正则表达式re模块
2019/03/19 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
中医药大学市场营销专业自荐信
2013/09/29 职场文书
项目经理聘任书
2014/03/29 职场文书
党员活动日总结
2014/05/05 职场文书
建筑投标担保书
2014/05/20 职场文书
优秀乡村医生事迹材料
2014/05/28 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
运动会加油稿20字
2014/11/15 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python