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实现截屏的函数
Jul 26 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
Django 根据数据模型models创建数据表的实例
May 27 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
Aug 22 Python
如何基于python生成list的所有的子集
Nov 11 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
Dec 04 Python
Python高阶函数、常用内置函数用法实例分析
Dec 26 Python
Python实现不规则图形填充的思路
Feb 02 Python
Python数组并集交集补集代码实例
Feb 18 Python
python爬取代理ip的示例
Dec 18 Python
python 中的@运算符使用
May 26 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如何编写易读的代码
2007/07/10 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
为原生js Array增加each方法
2012/04/07 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
2017/01/13 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
Python查找相似单词的方法
2015/03/05 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python多进程实现文件下载传输功能
2018/07/28 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
应用化学专业本科生求职信
2013/09/29 职场文书
项目专员岗位职责
2013/12/04 职场文书
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
预备党员入党思想汇报
2014/01/04 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
人事专员岗位说明书
2014/07/29 职场文书
青年志愿者活动方案
2014/08/17 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技