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 sys模块sys.path使用方法示例
Dec 04 Python
python实现RSA加密(解密)算法
Feb 17 Python
python实现单线程多任务非阻塞TCP服务端
Jun 13 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
如何用C代码给Python写扩展库(Cython)
May 17 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
pygame用blit()实现动画效果的示例代码
May 28 Python
Django中F函数的使用示例代码详解
Jul 06 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 Python
tensorflow与numpy的版本兼容性问题的解决
Jan 08 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笔记 字符串处理
2010/10/19 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
js微信支付实现代码
2016/12/22 Javascript
js转换对象为xml
2017/02/17 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
vue 插槽简介及使用示例
2020/11/19 Vue.js
python发送arp欺骗攻击代码分析
2014/01/16 Python
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
python elasticsearch环境搭建详解
2019/09/02 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
大一学生职业生涯规划
2014/03/11 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
服务员态度差检讨书
2014/10/28 职场文书
行政答辩状范文
2015/05/21 职场文书
西游记读书笔记
2015/06/25 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python