用 TensorFlow 訓(xùn)練 Doom 機(jī)器人

用 TensorFlow 訓(xùn)練 Doom 機(jī)器人

作者:Mark Litwintschik
本文地址:http://tech.marksblogg.com/tensorflow-vizdoom-bots.html

ViZDoom 是一個(gè) AI 研究平臺(tái)兼蕊,允許你訓(xùn)練機(jī)器人來(lái)玩 Doom结笨,這是 1993 年最初由 id Software 發(fā)布的經(jīng)典第一人稱視角射擊游戲沸毁。ViZDoom 使用一款開(kāi)源 Doom 引擎 ZDoom 與游戲進(jìn)行交互。

ViZDoom 包含了一系列用 C ++,Java和敬,Lua 和 Python 編寫(xiě)的示例機(jī)器人。在許多情況下,模型本身依賴于各種潛在的深度學(xué)習(xí)庫(kù)月幌,如 TensorFlowTheano

使用 ViZDoom悬蔽,機(jī)器人將針對(duì)場(chǎng)景進(jìn)行訓(xùn)練扯躺。ViZDoom 在發(fā)布源代碼中包含幾種場(chǎng)景。場(chǎng)景定義了 Doom 地圖,機(jī)器人可用的控件(如左轉(zhuǎn)录语,攻擊等)倍啥,玩家模式和技能水平。

在這篇博文中澎埠,我將通過(guò)設(shè)置 ViZDoom 和 TensorFlow虽缕,并訓(xùn)練機(jī)器人在 Doom 中扮演惡魔。

ViZDoom 啟動(dòng)運(yùn)行

以下是在全新安裝的 Ubuntu Desktop 14.04.4 上運(yùn)行蒲稳。通常我使用了分布式服務(wù)器氮趋,但是我想看到機(jī)器人在完成訓(xùn)練后玩游戲。

我將使用 Google 的深度學(xué)習(xí)框架 TensorFlow 進(jìn)行機(jī)器人培訓(xùn)江耀。為了方便起見(jiàn)剩胁,我將描述如何使用 CPU 運(yùn)行所有內(nèi)容,但是如果要使用 GPU 進(jìn)行訓(xùn)練决记,那么請(qǐng)進(jìn)一步了解參閱基于 GTX 1080 的 TensorFlow 博客摧冀,以 GPU 為中心的安裝說(shuō)明。在許多情況下系宫,TensorFlow 將在 GPU 上比常規(guī)桌面 CPU 快一至二個(gè)數(shù)量級(jí)索昂。

我正在使用的機(jī)器配置 Intel Core i5 4670K,頻率為 3.4 GHz扩借,32 GB DDR3 內(nèi)存椒惨,SanDisk SDSSDHII960G 960 GB SSD 驅(qū)動(dòng)器和 Nvidia GeForce GTX 1080 顯卡。
首先潮罪,我將安裝各種包依賴康谆。

$ sudo apt-get update
$ sudo apt-get install \
      build-essential \
      cmake \
      gfortran \
      git \
      libatlas-base-dev \
      libblas-dev \
      libboost-all-dev \
      libbz2-dev \
      libfluidsynth-dev \
      libgme-dev \
      libgtk2.0-dev \
      libjpeg-dev \
      liblapack-dev \
      liblua5.1-dev \
      libopenal-dev \
      libsdl2-dev \
      libwildmidi-dev  \
      nasm \
      openjdk-7-jdk \
      python-dev \
      python-pip \
      python-virtualenv \
      tar \
      timidity \
      zlib1g-dev

然后我將設(shè)置 Java 的主文件夾。

$ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

ViZDoom 是用 Python 編寫(xiě)的嫉到,所以我將創(chuàng)建一個(gè)虛擬環(huán)境并激活它沃暗。

$ virtualenv vz
$ source vz / bin / activate

然后我將安裝五個(gè)基于 Python 的依賴。其中包括 TensorFlow 的分布式 CPU 驅(qū)動(dòng)的 wheel何恶。如果要使用 CUDA 支持的 GPU 加速版本孽锥,有一個(gè)單獨(dú)的分布式。

$ pip install \
      cython \
      numpy
$ pip install \
      scikit-image \
      https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0-cp27-none-linux_x86_64.whl \
      tqdm

然后细层,我將克隆 ViZDoom git 存儲(chǔ)庫(kù)惜辑,構(gòu)建 Python 模塊并進(jìn)行安裝。

$ git clone https://github.com/mwydmuch/ViZDoom.git
$ cd ViZDoom

$ cmake -DCMAKE_BUILD_TYPE=Release \
        -DBUILD_PYTHON=ON \
        -DBUILD_JAVA=ON \
        -DBUILD_LUA=ON
$ make

$ pip install.

基于 TensorFlow 的模型通常與 CPU 和 GPU 無(wú)關(guān)疫赎,但如果你使用 CPU 驅(qū)動(dòng)的分布式 TensorFlow 進(jìn)行訓(xùn)練盛撑,則可能會(huì)看到警告:所使用的 wheel 沒(méi)有為你的 CPU 進(jìn)行優(yōu)化編譯。如果你正在運(yùn)行第四代或更高版本的 Intel Core i5 CPU捧搞,則將缺乏對(duì) SSE3抵卫,SSE4.1狮荔,SSE4.2,AVX 和 FMA 指令的支持陌僵。

訓(xùn)練 Doom 機(jī)器人

有一個(gè)示例模型 「learning_tensorflow.py」 位于 examples/python 文件夾中轴合,該文件夾將加載機(jī)器人在空房間的場(chǎng)景创坞,一個(gè)敵人在另一端碗短。機(jī)器人有能力左右移動(dòng)攻擊。機(jī)器人基于在比賽時(shí)間結(jié)束之前能夠快速殺死對(duì)手的得分题涨。

以下是此方案的配置文件:

$ cat scenarios/simpler_basic.cfg

doom_scenario_path = simpler_basic.wad

# Rewards
living_reward = -1

# Rendering options
screen_resolution = RES_640X480
screen_format = GRAY8

render_hud = true
render_crosshair = false
render_weapon = true
render_decals = false
render_particles = false

# make episodes start after 20 tics (after unholstering the gun)
episode_start_time = 14

# make episodes finish after 300 actions (tics)
episode_timeout = 300

# Available buttons
available_buttons =
    {
        MOVE_LEFT
        MOVE_RIGHT
        ATTACK
    }

下面花了 14 分鐘訓(xùn)練機(jī)器人偎谁。

$ cd examples/python
$ python learning_tensorflow.py

一旦訓(xùn)練完成,底層的開(kāi)源 Doom 引擎 ZDoom 開(kāi)始并且可以看到機(jī)器人在 10 局不同的游戲中對(duì)付敵人纲堵。

機(jī)器人每回合擁有 50 發(fā)彈藥巡雨,并給予 300 個(gè)游戲動(dòng)作來(lái)殺死單個(gè)惡魔。在這種情況下席函,惡魔并沒(méi)有反抗铐望,也沒(méi)有太大的動(dòng)作。不幸的是茂附,即使有這么好的設(shè)置正蛙,在超過(guò) 20% 的游戲中,機(jī)器人很少殺死惡魔营曼。以下是10場(chǎng)比賽的得分乒验。

Total score:  -404.0
Total score:  -404.0
Total score:  -404.0
Total score:  -404.0
Total score:  -404.0
Total score:  -404.0
Total score:  56.0
Total score:  -404.0
Total score:  -1.0
Total score:  -404.0

保衛(wèi)中心

ViZDoom 附帶的其他場(chǎng)景是「保衛(wèi)中心」場(chǎng)景,其中機(jī)器人在一個(gè)競(jìng)技場(chǎng)中是靜止的蒂阱,只允許左右轉(zhuǎn)動(dòng)并進(jìn)行攻擊锻全。有一列的敵人會(huì)穩(wěn)定地接近機(jī)器人,在敵人攻擊之前有時(shí)間殺死他們录煤。ViZDoom 的主要開(kāi)發(fā)者之一鳄厌,Micha? Kempka 上傳了這種情況下視頻的到 YouTube。

在我的 GTX 1080 上使用 GPU 加速 TensorFlow 分布式來(lái)訓(xùn)練機(jī)器人之前妈踊,我修改了以下五行代碼的示例 /python/ learning_tensorflow.py了嚎。訓(xùn)練了41分鐘才能完成。

learning_rate = 0.002
epochs = 5
learning_steps_per_epoch = 4000
test_episodes_per_epoch = 1000
config_file_path = "../../scenarios/defend_the_center.cfg"

每殺死一個(gè)敵人响委,機(jī)器人獲得一分新思,并且如果死亡,它會(huì)失去一分赘风。每輪有 26 發(fā)彈藥夹囚。在這過(guò)程中,我注意到機(jī)器人開(kāi)始非常亂開(kāi)槍邀窃,它的彈藥庫(kù)消耗有一點(diǎn)太快荸哟,遺漏一些惡魔假哎。它值得在射擊時(shí)瞄準(zhǔn)目標(biāo)。

十次運(yùn)行后鞍历,機(jī)器人死亡前平均每場(chǎng)殺死 5.9 名惡魔舵抹,

Total score:  5.0
Total score:  3.0
Total score:  5.0
Total score:  5.0
Total score:  4.0
Total score:  5.0
Total score:  6.0
Total score:  5.0
Total score:  7.0
Total score:  4.0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市劣砍,隨后出現(xiàn)的幾起案子惧蛹,更是在濱河造成了極大的恐慌,老刑警劉巖刑枝,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件香嗓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡装畅,警方通過(guò)查閱死者的電腦和手機(jī)靠娱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)掠兄,“玉大人像云,你說(shuō)我怎么就攤上這事÷煜Γ” “怎么了迅诬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)双抽。 經(jīng)常有香客問(wèn)我百框,道長(zhǎng),這世上最難降的妖魔是什么牍汹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任铐维,我火速辦了婚禮,結(jié)果婚禮上慎菲,老公的妹妹穿的比我還像新娘嫁蛇。我一直安慰自己,他們只是感情好露该,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布睬棚。 她就那樣靜靜地躺著,像睡著了一般解幼。 火紅的嫁衣襯著肌膚如雪抑党。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天撵摆,我揣著相機(jī)與錄音底靠,去河邊找鬼。 笑死特铝,一個(gè)胖子當(dāng)著我的面吹牛暑中,可吹牛的內(nèi)容都是我干的壹瘟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鳄逾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼稻轨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起雕凹,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤殴俱,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后请琳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體粱挡,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滋尉。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡季研,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逆屡,到底是詐尸還是另有隱情圾旨,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布魏蔗,位于F島的核電站砍的,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏莺治。R本人自食惡果不足惜廓鞠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谣旁。 院中可真熱鬧床佳,春花似錦、人聲如沸榄审。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)搁进。三九已至浪感,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饼问,已是汗流浹背影兽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匆瓜,地道東北人赢笨。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓未蝌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親茧妒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萧吠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. 介紹 首先讓我們來(lái)看看TensorFlow! 但是在我們開(kāi)始之前桐筏,我們先來(lái)看看Python API中的Ten...
    JasonJe閱讀 11,725評(píng)論 1 32
  • 這是心靈自由寫(xiě)作群第三期第十一次作業(yè)纸型。 我的失敗感已轉(zhuǎn)向無(wú)力感。什么也改變不了梅忌,也不知道該如何改變狰腌。生活還是如此,...
    灰菠蘿閱讀 149評(píng)論 1 2
  • 其實(shí),我以前從來(lái)沒(méi)有想過(guò)好女人和潑婦的關(guān)系踱葛,甚至我和大多數(shù)的人一樣丹莲,是不喜歡潑婦、排斥潑婦甚至有些鄙視潑婦...
    記二十一閱讀 1,200評(píng)論 0 1
  • 第一次接觸《島上書(shū)店》時(shí),我完全不知道這是一本多么暢銷(xiāo)的小說(shuō)性含,直至看到腰封洲赵,竟然席卷《出版人周刊》、《紐約時(shí)報(bào)》商蕴、...
    青梅149閱讀 528評(píng)論 7 2
  • 今天新安裝了mysql5.7叠萍,配置完環(huán)境變量后,想啟動(dòng)它時(shí)卻出現(xiàn)了以下異常: 網(wǎng)上查了下究恤,解決方法如下: 刪除my...
    柳輕言閱讀 2,762評(píng)論 0 0