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读写Excel文件方法介绍
Nov 22 Python
python下载文件时显示下载进度的方法
Apr 02 Python
Python中使用第三方库xlrd来读取Excel示例
Apr 05 Python
Python中property属性实例解析
Feb 10 Python
python操作excel的包(openpyxl、xlsxwriter)
Jun 11 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
numpy.array 操作使用简单总结
Nov 08 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
基于python 取余问题(%)详解
Jun 03 Python
Python调用ffmpeg开源视频处理库,批量处理视频
Nov 16 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
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
如何在基于vue-cli的项目自定义打包环境
2018/11/10 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
python标准日志模块logging的使用方法
2013/11/01 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
python设置环境变量的原因和方法
2019/06/24 Python
Python 下载及安装详细步骤
2019/11/04 Python
学python爬虫能做什么
2020/07/29 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
主管职责范文
2013/11/09 职场文书
销售演讲稿范文
2014/01/08 职场文书
西式婚礼证婚词
2014/01/12 职场文书
连锁酒店店长职责范本
2014/02/13 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书