baselines示例程序train_cartpole.py的ImportError

 更新时间:2022年05月20日 12:44:42   作者:微丶念(小矿工)  
这篇文章主要为大家介绍了baselines示例程序train_cartpole.py的ImportError引入错误详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

问题导出

为了更方便地实现自己的一些想法,我最终还是向OpenAI的baselines屈服了,因为自己的一些实现总是难与各大论文给出的结果进行对比。于是我今天安装了baselines,其中还是有一些坑的,这里主要介绍在安装完成之后,运行示例时cartpole.py所遇到的坑,它叫做ImportError。

ImportError

我们先cd到文件夹baselines/baselines/deepq/experiments下,然后运行下面语句:

$ python3 train_cartpole.py

然后就报错了……

从图中我们可以看出,在文件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

发现又出错了:

不过这个错误是肯定会出的,我们无缘无故注释掉了人家写的一个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的详细内容,更多关于train_cartpole.py的ImportError的资料请关注脚本之家其它相关文章!

相关文章

  • Python中__new__与__init__方法的区别详解

    Python中__new__与__init__方法的区别详解

    这篇文章主要介绍了Python中__new__与__init__方法的区别,是Python学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • 使用Python3 poplib模块删除服务器多天前的邮件实现代码

    使用Python3 poplib模块删除服务器多天前的邮件实现代码

    这篇文章主要介绍了使用Python3 poplib模块删除多天前的邮件的实现代码,代码简单易懂,非常不错,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Python PyQt5实现拖放效果的原理详解

    Python PyQt5实现拖放效果的原理详解

    这篇文章主要为大家详细介绍了Python PyQt5中拖放效果的实现原理与实现代码,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-11-11
  • JAVA及PYTHON质数计算代码对比解析

    JAVA及PYTHON质数计算代码对比解析

    这篇文章主要介绍了JAVA及PYTHON质数计算代码对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python taipy库轻松地将数据和机器学习模型转为功能性Web应用

    python taipy库轻松地将数据和机器学习模型转为功能性Web应用

    taipy 是一个开源的 Python 库,任何具有基本 Python 技能的人都可以使用,对于数据科学家、机器学习工程师和 Python 程序员来说,它是一个方便的工具,借助 Taipy,你可以轻松地将数据和机器学习模型转变为功能性的 Web 应用程序
    2024-01-01
  • 详解Python中映射类型的内建函数和工厂函数

    详解Python中映射类型的内建函数和工厂函数

    这篇文章主要介绍了详解Python中映射类型的内建函数和工厂函数,目前Python的内建映射类型只有字典一种,需要的朋友可以参考下
    2015-08-08
  • python opencv 图像拼接的实现方法

    python opencv 图像拼接的实现方法

    高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图。这篇文章主要介绍了python opencv 图像拼接,需要的朋友可以参考下
    2019-06-06
  • python 如何通过KNN来填充缺失值

    python 如何通过KNN来填充缺失值

    这篇文章主要介绍了python 通过KNN来填充缺失值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Django结合使用Scrapy爬取数据入库的方法示例

    Django结合使用Scrapy爬取数据入库的方法示例

    这篇文章主要介绍了Django结合使用Scrapy爬取数据入库的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 用Python定时发送天气邮件

    用Python定时发送天气邮件

    大家好,本篇文章主要讲的是用Python定时发送天气邮件,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02

最新评论