baselines程序train_cartpole.py的ImportError怎么用(baselines,importerror,开发技术)

时间:2024-05-04 04:28:15 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

接下来,请跟着小编一起来学习吧!

问题导出

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

ImportError

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

$python3train_cartpole.py

然后就报错了……

baselines程序train_cartpole.py的ImportError怎么用

从图中我们可以看出,在文件train_cartpole.py中有如下语句:

frombaselinesimportdeepq

而在我们导入deepq的时候,将会执行deepq文件夹下的init.py文件,于是我们打开这一文件:

frombaselines.deepqimportmodels#noqa
frombaselines.deepq.build_graphimportbuild_act,build_train#noqa
frombaselines.deepq.simpleimportlearn,load#noqa
frombaselines.deepq.replay_bufferimportReplayBuffer,PrioritizedReplayBuffer#noqa
defwrap_atari_dqn(env):
frombaselines.common.atari_wrappersimportwrap_deepmind
returnwrap_deepmind(env,fram_stack=True,scale=True)

在报错中,提到了上面的这一语句:

frombaselines.deepq.simpleimportlearn,load#noqa

同时,报错中提到,在simple.py中有:

frombaselinesimportdeepq

问题渐渐明朗了,在我们import deepq的时候,将要执行init.py文件,这个文件将会从simple.py中把learn和load导入到deepq的命名空间下。而simple.py又想要import deepq,这也就构成了所谓的“Looping Import”。那我们应该如何解决呢?

我们先将simple.py中的下面这条语句注释掉:

frombaselinesimportdeepq

然后运行:

$python3train_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中的下列语句注释掉:

frombaselines.deepq.build_graphimportbuild_act,build_train#noqa

b) 将simple.py中的下列语句换掉:

frombaselinesimportdeepq

换为:

frombaselines.deepq.build_graphimportbuild_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) 运行:

$python3train_cartpole.py

OK,问题解决。

对了,在OpenAI Baselines里面,有一些代码用到了Python3.6的特性,比如直接(None, tuple),这在Python3.4是不允许的,所以建议大家直接安装conda环境,并装好Python3.6。

若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

本文:baselines程序train_cartpole.py的ImportError怎么用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:MySQL中EXPLAIN语句怎么使用下一篇:

10 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18