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数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 Python
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
tensorflow创建变量以及根据名称查找变量
Mar 10 Python
python实现比较文件内容异同
Jun 22 Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
Python中print和return的作用及区别解析
May 05 Python
python找出一个列表中相同元素的多个索引实例
Jun 11 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
Python 如何创建一个简单的REST接口
Jul 30 Python
python FTP编程基础入门
Feb 27 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
关于手调机和数调机的选择
2021/03/02 无线电
php获取301跳转URL简单实例
2013/12/16 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
React Native 截屏组件的示例代码
2017/12/06 Javascript
微信小程序自定义导航教程(兼容各种手机)
2018/12/12 Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
Python中的True,False条件判断实例分析
2015/01/12 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
第二课堂活动总结
2014/05/07 职场文书
服装仓管员岗位职责
2014/06/17 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
大学新生入学感想
2015/08/07 职场文书
新学期开学寄语2016
2015/12/04 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
PHP设计模式(观察者模式)
2021/07/07 PHP
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript