baselines示例程序train_cartpole.py的ImportError
問題導(dǎo)出
為了更方便地實現(xiàn)自己的一些想法,我最終還是向OpenAI的baselines屈服了,因為自己的一些實現(xiàn)總是難與各大論文給出的結(jié)果進行對比。于是我今天安裝了baselines,其中還是有一些坑的,這里主要介紹在安裝完成之后,運行示例時cartpole.py所遇到的坑,它叫做ImportError。
ImportError
我們先cd到文件夾baselines/baselines/deepq/experiments下,然后運行下面語句:
$ python3 train_cartpole.py
然后就報錯了……

從圖中我們可以看出,在文件train_cartpole.py中有如下語句:
from baselines import deepq
而在我們導(dǎo)入deepq的時候,將會執(zhí)行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的時候,將要執(zhí)行__init__.py文件,這個文件將會從simple.py中把learn和load導(dǎo)入到deepq的命名空間下。而simple.py又想要import deepq,這也就構(gòu)成了所謂的“Looping Import”。那我們應(yīng)該如何解決呢?
我們先將simple.py中的下面這條語句注釋掉:
from baselines import deepq
然后運行:
$ python3 train_cartpole.py
發(fā)現(xiàn)又出錯了:

不過這個錯誤是肯定會出的,我們無緣無故注釋掉了人家寫的一個import語句,能不錯嘛。不過不要慌,我們繼續(xù)分析,為什么這里要import deepq呢?就是為了執(zhí)行下面的語句:
act = deepq.build_act(**act_params) ... act, train, update_target, debug = deepq.build_train(...)
這里因為我們在__init__.py中將build_act和build_train方法導(dǎo)入到了deepq的命名空間下,所以這里可以直接在deepq的命名空間中去調(diào)用build_act和build_action。
如果我們要在simple.py文件中使用deepq.build_act的話,那么必然要在simple.py中導(dǎo)入deepq,而且也需要在__init__.py中導(dǎo)入simple,這么一來,就會出現(xiàn)“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環(huán)境,并裝好Python3.6。
以上就是baselines示例程序train_cartpole.py的ImportError的詳細(xì)內(nèi)容,更多關(guān)于train_cartpole.py的ImportError的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python中__new__與__init__方法的區(qū)別詳解
這篇文章主要介紹了Python中__new__與__init__方法的區(qū)別,是Python學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05
使用Python3 poplib模塊刪除服務(wù)器多天前的郵件實現(xiàn)代碼
這篇文章主要介紹了使用Python3 poplib模塊刪除多天前的郵件的實現(xiàn)代碼,代碼簡單易懂,非常不錯,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
JAVA及PYTHON質(zhì)數(shù)計算代碼對比解析
這篇文章主要介紹了JAVA及PYTHON質(zhì)數(shù)計算代碼對比,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06
python taipy庫輕松地將數(shù)據(jù)和機器學(xué)習(xí)模型轉(zhuǎn)為功能性Web應(yīng)用
taipy 是一個開源的 Python 庫,任何具有基本 Python 技能的人都可以使用,對于數(shù)據(jù)科學(xué)家、機器學(xué)習(xí)工程師和 Python 程序員來說,它是一個方便的工具,借助 Taipy,你可以輕松地將數(shù)據(jù)和機器學(xué)習(xí)模型轉(zhuǎn)變?yōu)楣δ苄缘?nbsp;Web 應(yīng)用程序2024-01-01
詳解Python中映射類型的內(nèi)建函數(shù)和工廠函數(shù)
這篇文章主要介紹了詳解Python中映射類型的內(nèi)建函數(shù)和工廠函數(shù),目前Python的內(nèi)建映射類型只有字典一種,需要的朋友可以參考下2015-08-08
Django結(jié)合使用Scrapy爬取數(shù)據(jù)入庫的方法示例
這篇文章主要介紹了Django結(jié)合使用Scrapy爬取數(shù)據(jù)入庫的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

