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获取服务器信息的最简单实现方法
Mar 05 Python
浅析python中的分片与截断序列
Aug 09 Python
Python创建对称矩阵的方法示例【基于numpy模块】
Oct 12 Python
详解python3中zipfile模块用法
Jun 18 Python
如何用Python实现简单的Markdown转换器
Jul 16 Python
使用python批量化音乐文件格式转换的实例
Jan 09 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
python科学计算之scipy——optimize用法
Nov 25 Python
Python操作Jira库常用方法解析
Apr 10 Python
Python实现CAN报文转换工具教程
May 05 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
浅谈哪个Python库才最适合做数据可视化
Jun 28 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
新浪新闻小偷
2006/10/09 PHP
php将数据库导出成excel的方法
2010/05/07 PHP
php使用websocket示例详解
2014/03/12 PHP
PHP写的资源下载防盗链类分享
2014/05/12 PHP
php常用的url处理函数总结
2014/11/19 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
js H5 canvas投篮小游戏
2016/08/18 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
vant实现购物车功能
2020/06/29 Javascript
python网络爬虫采集联想词示例
2014/02/11 Python
分享一个常用的Python模拟登陆类
2015/03/29 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
python 如何快速复制序列
2020/09/07 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
Rossignol金鸡美国官网:始于1907年法国百年雪具品牌
2019/03/06 全球购物
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
高中政治教学反思
2014/01/18 职场文书
有关朝花夕拾的读书笔记
2015/06/29 职场文书