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抓取网页正文的源码
Jun 11 Python
总结Python编程中函数的使用要点
Mar 20 Python
使用Python & Flask 实现RESTful Web API的实例
Sep 19 Python
简单了解Django模板的使用
Dec 20 Python
python opencv3实现人脸识别(windows)
May 25 Python
Win10下python3.5和python2.7环境变量配置教程
Sep 18 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
tensorflow图像裁剪进行数据增强操作
Jun 30 Python
Pytorch1.5.1版本安装的方法步骤
Dec 31 Python
分享3个非常实用的 Python 模块
Mar 03 Python
利用Python实现模拟登录知乎
May 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
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
Zend Guard一些常见问题解答
2008/09/11 PHP
CI框架附属类用法分析
2018/12/26 PHP
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
根据输入邮箱号跳转到相应登录地址的解决方法
2016/12/13 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
关于Layui Table隐藏列问题
2019/09/16 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
Python全面分析系统的时域特性和频率域特性
2020/02/26 Python
为什么相对PHP黑python的更少
2020/06/21 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
cf搞笑广告词
2014/03/14 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
中学教师师德承诺书
2014/05/23 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
redis数据结构之压缩列表
2022/03/21 Redis
vue打包时去掉所有的console.log
2022/04/10 Vue.js
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers