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中Continue语句的用法的举例详解
May 14 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
Dec 14 Python
Python内建模块struct实例详解
Feb 02 Python
Python操作MySQL模拟银行转账
Mar 12 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
Python实现FM算法解析
Jun 18 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
python动态视频下载器的实现方法
Sep 16 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
Python os库常用操作代码汇总
Nov 03 Python
python调用百度API实现人脸识别
Nov 17 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
Feb 25 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
php 远程关机操作的代码
2008/12/05 PHP
PHP中文分词的简单实现代码分享
2011/07/17 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
浅谈PHP中的
2016/04/23 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
JS保存、读取、换行、转Json报错处理方法
2013/06/14 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
2017/04/25 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
Python实现的简单万年历例子分享
2014/04/25 Python
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
Python实现基于C/S架构的聊天室功能详解
2018/07/07 Python
python flask安装和命令详解
2019/04/02 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
商务英语毕业生自荐信范文
2013/11/08 职场文书
主办会计岗位职责
2014/03/13 职场文书
企业晚会策划方案
2014/05/29 职场文书
研究生导师推荐信
2014/09/06 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书