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通过poll实现异步IO的方法
Jun 04 Python
轻松实现TensorFlow微信跳一跳的AI
Jan 05 Python
Python编程求质数实例代码
Jan 31 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
Jun 23 Python
用Eclipse写python程序
Feb 10 Python
python3将视频流保存为本地视频文件
Jun 20 Python
使用celery和Django处理异步任务的流程分析
Feb 19 Python
jenkins+python自动化测试持续集成教程
May 12 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 Python
树莓派4B安装Tensorflow的方法步骤
Jul 16 Python
Python实现弹球小游戏
Aug 01 Python
pandas DataFrame.shift()函数的具体使用
May 24 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项目打包方法
2008/02/18 PHP
php intval的测试代码发现问题
2008/07/27 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
HTML颜色选择器实现代码
2010/11/23 Javascript
jQuery插件zepto.js简单实现tab切换
2015/06/16 Javascript
angular.bind使用心得
2015/10/26 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
2017/03/28 jQuery
js简易版购物车功能
2017/06/17 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
python模拟登陆阿里妈妈生成商品推广链接
2014/04/03 Python
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
python装饰器练习题及答案
2019/11/01 Python
如何基于Python实现数字类型转换
2020/02/07 Python
python实现三种随机请求头方式
2021/01/05 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
木工主管岗位职责
2013/12/08 职场文书
组织关系转移介绍信
2014/01/16 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
公司门卫岗位职责
2015/04/13 职场文书
讲座通知范文
2015/04/23 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android