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实现方法
Nov 18 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
解决python flask中config配置管理的问题
Jul 26 Python
python统计指定目录内文件的代码行数
Sep 19 Python
python能做什么 python的含义
Oct 12 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 Python
Python如何输出百分比
Jul 31 Python
通过代码实例解析Pytest运行流程
Aug 20 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 Python
jupyter notebook指定启动目录的方法
Mar 02 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中hashtable实现示例分享
2014/02/13 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
javascript之bind使用介绍
2011/10/09 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
Python实现定时精度可调节的定时器
2018/04/15 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
python字符串的拼接方法总结
2019/11/18 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
2020/03/14 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
餐饮总经理岗位职责
2014/03/07 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
人事聘任通知
2015/04/21 职场文书
消防宣传语大全
2015/07/13 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers