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在windows命令行下输出彩色文字的方法
Mar 19 Python
python查询sqlite数据表的方法
May 08 Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 Python
Python 使用with上下文实现计时功能
Mar 09 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
Oct 30 Python
python实现QQ批量登录功能
Jun 19 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
python3连接MySQL8.0的两种方式
Feb 17 Python
Python collections模块的使用方法
Oct 09 Python
Python SQLAlchemy库的使用方法
Oct 13 Python
教你怎么用Python操作MySql数据库
May 31 Python
Python Pandas解析读写 CSV 文件
Apr 11 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
正则表达式语法
2006/10/09 Javascript
c#中的实现php中的preg_replace
2009/12/21 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
js动态添加onclick事件可传参数与不传参数
2014/07/29 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
jquery实现加载更多"转圈圈"效果(示例代码)
2020/11/09 jQuery
使用Python下载Bing图片(代码)
2013/11/07 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
Python基础知识点 初识Python.md
2019/05/14 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
python opencv实现信用卡的数字识别
2020/01/12 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
德国隐形眼镜店:LuckyLens
2018/07/29 全球购物
品学兼优的大学生自我评价
2013/09/20 职场文书
思想品德课教学反思
2014/02/10 职场文书
爸爸的花儿落了教学反思
2014/02/20 职场文书
班级体育活动总结
2014/07/05 职场文书
优秀纪检干部材料
2014/08/27 职场文书
教师岗位职责范本
2015/04/02 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
2022/06/21 Golang