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易忽视知识点小结
May 25 Python
Python通过90行代码搭建一个音乐搜索工具
Jul 29 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
Jul 22 Python
python使用tornado实现简单爬虫
Jul 28 Python
Python多进程入门、分布式进程数据共享实例详解
Jun 03 Python
python语言基本语句用法总结
Jun 11 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
PyQt5+Pycharm安装和配置图文教程详解
Mar 24 Python
浅谈keras 的抽象后端(from keras import backend as K)
Jun 16 Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 Python
Python基础之pandas数据合并
Apr 27 Python
Python帮你解决手机qq微信内存占用太多问题
Feb 15 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启动时候提示PHP startup的解决方法
2013/05/07 PHP
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
WebQQ最新登陆协议的用法
2014/12/22 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
jquery select选中的一个小问题
2009/10/11 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
jQuery鼠标事件汇总
2015/08/30 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
2018/05/15 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
layui清除radio的选中状态实例
2019/11/14 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
幼儿园小班评语大全
2014/04/17 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
2015高考寄语集锦
2015/02/27 职场文书
公司庆典主持词
2015/07/04 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
MySql开发之自动同步表结构
2021/05/28 MySQL
详解MindSpore自定义模型损失函数
2021/06/30 Python
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers
python全面解析接口返回数据
2022/02/12 Python
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python