这篇文章主要介绍“baselines程序train_cartpole.py的ImportError怎么用”,在日常操作中,相信很多人在baselines程序train_cartpole.py的ImportError怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”baselines程序train_cartpole.py的ImportError怎么用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
为了更方便地实现自己的一些想法,我最终还是向OpenAI的baselines屈服了,因为自己的一些实现总是难与各大论文给出的结果进行对比。于是我今天安装了baselines,其中还是有一些坑的,这里主要介绍在安装完成之后,运行示例时cartpole.py所遇到的坑,它叫做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怎么用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。