教你從頭到尾利用DQN自動玩flappy bird(全程命令提示,GPU+CPU版)
教你從頭到尾利用DQN自動玩flappy bird(全程命令提示,GPU+CPU)
作者:驍哲、李偉、July
說明:本文分兩部分,第一部分為GPU版教程,第二部分為CPU版教程,兩個教程都主要由驍哲編寫,李偉校對,而最後跑的是yenchenlin的github開源demo。如遇問題歡迎加Q群交流:472899334。且若探究實驗背後原理,請參看此課程:深度學習線上班。
時間:二零一六年十月十三日。
前言
我們在上一篇教程《基於torch學汪峰寫歌詞、聊天機器人、影象著色/生成、看圖說話、字幕生成》中說到:“讓每一個人都能玩一把,無限降低初學朋友的實驗門檻”,那是否能把難度再次降低呢,比如部分同學不熟悉Linux命令咋整,那是不是不熟悉Linux命令就沒法折騰了?然既然是為了讓每個人都能玩一把,那就應該盡最大可能照顧到最大多數。
本教程提供全程命令提示,以便讓Linux命令暫不熟的同學也能搭建起來。因此,自動玩轉flappy bird分三個步驟:
- 不管三七二十一,先把遊戲搭建起來
- 搭建起來後,Linux命令後續慢慢熟悉,熟悉後,一通百通,搭建其他實驗的環境也會立馬順暢許多
- 取得成就感和安心之後,再細細深究實驗背後之原理(當然,深度學習線上班上也會深究實驗背後原理)
另本教程省略了ubuntu14.04安裝,如果此前沒安裝過Ubuntu,可以參看《教你從頭到尾利用DL學梵高作畫》裡的第4.1部分。且,本文字一開始只有GPU版的教程,但為照顧到沒有GPU的同學,特地在本文第二部分增加CPU版的教程,以讓每一個人都能玩。
還是這個事,歡迎更多朋友跟我們一起做實驗,一起玩。包括本flappy bird在內的8個實驗:梵高作畫、文字生成、自動聊天機器人、影象著色、影象生成、看圖說話、字幕生成、flappy bird,今2016年內做出這8個實驗中的任意一個並在微博上AT@研究者July,便送100上課券,把實驗心得發社群 ask.julyed.com 後,再送100上課券。
第一部分、GPU版教程
1.1NVIDIA驅動、CUDA、cudnn安裝
下載相應檔案,後續 使用,下載地址 :
- NVIDIA驅動 http://www.geforce.cn/drivers (搜尋 對應型號)
- CUDA驅動 https://developer.nvidia.com/cuda-toolkit (搜尋對應版本)
- CUDNN驅動 https://developer.nvidia.com/cudnn
以下操作均使用root賬戶
apt-get update (更新源)
apt-get install vim (安裝VIM,也可使用 emacs nano)
vi /etc/default/grub (進入grub檔案)
啟用字元介面登入
將這行 GRUB_CMDLINE_LINUX_DEFAULT="quiet" 中的 quiet 修改為 text
GRUB_CMDLINE_LINUX_DEFAULT="text"
儲存退出
update-grub2 (更新一下)
reboot (重啟)
1.1.1、 Install NVIDIA Driver 安裝NVIDIA驅動
cd /**/**/** (cd到cuda所在檔案目錄下)
./NVIDIA-Linux-x86_64-367.44.run (安裝NVIDIA驅動,此檔案需執行許可權,chmod +x NVIDIA-Linux-x86_64-367.44.run)
reboot (重啟)
1.1.2、 Install CUDA 安裝CUDA
cd /**/**/** (cd到cuda所在檔案目錄下)
./cuda_8.0.27_linux.run (安裝CUDA,此檔案需執行許可權,如遇許可權問題 可執行 chmod +x 檔名)
!accept之後第一個選項填寫“n”(該選項讓你選擇是否安裝NVIDIA的Driver,之前已經安裝過了, 所以不需要),之後一路“綠燈”。
vi /etc/default/grub (開啟grub)
啟用圖形介面登入
將這行 GRUB_CMDLINE_LINUX_DEFAULT="text" 中的 text修改為 quiet
儲存退出
update-grub2 (更新一下)
reboot (重啟)
1.1.3、 Install cuDNN 安裝cuDNN
tar xvzf cudnn-7.5-linux-x64-v5.1-ga.tgz (解壓)
將CUDNN解壓,將解壓出來的檔案複製到 CUDA 目錄 如下
sudo cp cuda/include/cudnn.h /usr/local/cuda/include (複製)
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64 (複製)
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn* (加許可權)
CUDA Environment Path 新增CUDA的環境變數
終端中執行
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME=/usr/local/cuda
export PATH="$CUDA_HOME/bin:$PATH"
1.2、原始碼安裝Tensorflow
apt-get install git
Clone the TensorFlow repository 克隆Tensorflow
git clone https://github.com/tensorflow/tensorflow
1.2.1、 Install Bazel 安裝Bazel
Install JDK 8 安裝JDK8
sudo add-apt-repository ppa:webupd8team/java (新增源)
sudo apt-get update (更新)
sudo apt-get install oracle-java8-installer (安裝)
Add Bazel distribution URI as a package source (one time setup) (將Bazel的URL新增為源)
echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://bazel.io/bazel-release.pub.gpg | sudo apt-key add -
Update and install Bazel 更新並下載Bazel
sudo apt-get update && sudo apt-get install bazel
sudo apt-get upgrade bazel
1.2.2、 Install other dependencies 安裝其他依賴
sudo apt-get install python-numpy swig python-dev python-wheel python-pip
Configure the installation 配置 (這裡注意configure後面的提示,提示已經給出)
./configure(在 clone 下來的 tensorflow目錄執行)
Please specify the location of python. [Default is /usr/bin/python]:
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with GPU support? [y/N] y
GPU support will be enabled for TensorFlow
Please specify which gcc nvcc should use as the host compiler. [Default is /usr/bin/gcc]:
Please specify the Cuda SDK version you want to use, e.g. 7.0. [Leave empty to use system default]: 8.0 (此處根據實際情況修改)
Please specify the location where CUDA 7.5 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:
Please specify the cuDNN version you want to use. [Leave empty to use system default]: 5 (此處根據實際情況修改)
Please specify the location where cuDNN 5 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:
Please specify a list of comma-separated Cuda compute capabilities you want to build with.
You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.
Please note that each additional compute capability significantly increases your build time and binary size.
[Default is: "3.5,5.2"]:3.0(這個值視機器配置而定,配置越高值越高,參考 https://developer.nvidia.com/cuda-gpus#collapse4,而3.0通用)
Setting up Cuda include
Setting up Cuda lib
Setting up Cuda bin
Setting up Cuda nvvm
Setting up CUPTI include
Setting up CUPTI lib64
Configuration finished
1.2.3、 Create the pip package and install 建立pip包並且安裝
bazel build -c opt //tensorflow/tools/pip_package:build_pip_package (筆者用公司網提示error,翻牆後問題解決)
bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg(筆者安裝過程中出現ImportError:No module named setuptools,解決辦法:apt-get install python-pip,安裝python-pip就行了)
sudo pip install /tmp/tensorflow_pkg/tensorflow-0.11.0rc0-py2-none-any.whl
1.2.4、 Setting up TensorFlow for Development 編譯設定Tensorflow
bazel build -c opt //tensorflow/tools/pip_package:build_pip_package
bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
mkdir _python_build
cd _python_build
ln -s ../bazel-bin/tensorflow/tools/pip_package/build_pip_package.runfiles/org_tensorflow/* .
ln -s ../tensorflow/tools/pip_package/* .
python setup.py develop
1.2.5、 Train your first TensorFlow neural net model 測試Tensorflow
cd tensorflow/models/image/mnist
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME=/usr/local/cuda (這裡重新新增環境變數是因為筆者安裝過程中提示未能找到CUDA)
python convolutional.py(筆者這裡出現AttributeError:type object 'NewBase' has no attribute 'is_abstract'問題,解決辦法:sudo pip install six --upgrade -- target="/usr/lib/python2.7/dist-packages")
1.3、安裝OpenCV
Download OpenCV 下載OpenCV
瀏覽器開啟 http://opencv.org/
右側下載Linux版本的OpenCV
cd到下載目錄
unzip opencv-2.4.13.zip
cd opencv-2.4.13
mkdir release
sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make install
1.4、下載FlappyBird
Download DeepLearningFlappyBird 下載FlappyBird
git clone --recursive https://github.com/yenchenlin/DeepLearningFlappyBird
1.5、 安裝pygame
Install pygame 安裝pygame
wget http://www.pygame.org/ftp/pygame-1.9.1release.tar.gz 下載pygame
sudo apt-get install libsdl1.2-dev (SDL安裝)
sudo apt-get install libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev libsdl-net1.2-dev libsdl-sge-dev libsdl-sound1.2-dev libportmidi-dev libsmpeg-dev (安裝其他依賴包)
cd pygame-1.9.1release
python config.py
run deep_q_network.py
python deep_q_network.py 執行deep_q_network.py (筆者這裡報錯:AttributeError:'module' object has no attribute 'stack',解決辦法:sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose)
git clone git://github.com/numpy/numpy.git numpy (筆者這裡執行了一下cd numpy;python setup.py install,發現報錯缺少cython於是執行後面的命令:apt-get install cython)
cd numpy
python setup.py install
1.6、GPU版的執行程式
全部安裝完後,再次執行
python deep_q_network.py
畫面卡住等待一下,GPU、CUDA在執行需要時間..
稍等片刻,奇蹟出現了,飛鳥開始自動飛、自動上下跳躍、自動穿過障礙,要知道純人工手動玩很難堅持9s!
靜態圖片可能看不出啥效果,視訊見這:http://weibo.com/1580904460/EcxQh6em0。
至此,這個曾虐遍全球無數人的遊戲,就這樣在我們手裡,利用深度學習自動玩轉了!無不體現深度學習的神奇與魅力。
第二部分、CPU版教程
以下操作均使用root賬戶
2.1、 安裝Tensorflow
原始碼安裝方式
Clone the TensorFlow repository 克隆Tensorflow
git clone https://github.com/tensorflow/tensorflow
2.1.1、 Install Bazel 安裝Bazel
Install JDK 8 安裝JDK8
sudo add-apt-repository ppa:webupd8team/java (新增源)
sudo apt-get update (更新)
sudo apt-get install oracle-java8-installer (安裝)
Add Bazel distribution URI as a package source (one time setup) (將Bazel的URL新增為源)
echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://bazel.io/bazel-release.pub.gpg | sudo apt-key add -
Update and install Bazel 更新並下載Bazel
sudo apt-get update && sudo apt-get install bazel
sudo apt-get upgrade bazel
2.1.2、 Install other dependencies 安裝其他依賴
sudo apt-get install python-numpy swig python-dev python-wheel python-pip
Configure the installation 配置 (這裡注意configure後面的提示,提示已經給出)
./configure [在 clone 下來的 tensorflow
目錄執行]
標註顏色的字型 需要手動輸入
Please specify the location of python. [Default is /usr/bin/python]:
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with GPU support? [y/N] N
Configuration finished
2.1.3、 Create the pip package and install 建立pip包並且安裝
bazel build -c opt //tensorflow/tools/pip_package:build_pip_package (筆者用公司網提示error,翻牆後問題解決)
bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg(筆者安裝過程中出現ImportError:No module named setuptools,解決辦法:apt-get install python-pip,安裝python-pip就行了。)
sudo pip install /…/…/tensorflow-0.11.0rc0-py27-none-any.whl
上述tensorflow...whl檔案 下載地址 https://github.com/tensorflow/tensorflow#installation
選擇 Linux_CPU-only中的對應版本
2.1.4、 Setting up TensorFlow for Development 編譯設定Tensorflow
bazel build -c opt //tensorflow/tools/pip_package:build_pip_package
mkdir _python_build
cd _python_build
ln -s ../bazel-bin/tensorflow/tools/pip_package/build_pip_package.runfiles/org_tensorflow/* .
ln -s ../tensorflow/tools/pip_package/* .
python setup.py develop
2.1.5、 Train your first TensorFlow neural net model 測試Tensorflow
cd tensorflow/models/image/mnist
python convolutional.py(筆者這裡出現AttributeError:type object 'NewBase' has no attribute 'is_abstract'問題,解決辦法:sudo pip install six --upgrade --
target="/usr/lib/python2.7/dist-packages")
2.2、安裝OpenCV
Download OpenCV 下載OpenCV
瀏覽器開啟 http://opencv.org/
右側下載Linux版本的OpenCV
cd到下載目錄
unzip opencv-2.4.13.zip
cd opencv-2.4.13
mkdir release
sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make install
2.3、 下載FlappyBird
Download DeepLearningFlappyBird 下載FlappyBird
git clone --recursive https://github.com/yenchenlin/DeepLearningFlappyBird
2.4、 安裝pygame
Install pygame 安裝pygame
wget http://www.pygame.org/ftp/pygame-1.9.1release.tar.gz 下載pygame
sudo apt-get install libsdl1.2-dev (SDL安裝)
sudo apt-get install libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev libsdl-net1.2-dev libsdl-sge-dev libsdl-sound1.2-dev libportmidi-dev libsmpeg-dev (安裝其他依賴包)
cd pygame-1.9.1release
python config.py
run deep_q_network.py
python deep_q_network.py 執行deep_q_network.py (筆者這裡報錯:AttributeError:'module' object has no attribute 'stack',解決辦法:
sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas
python-sympy python-nose
git clone git://github.com/numpy/numpy.git numpy (筆者這裡執行了一下cd numpy;python setup.py install,發現報
錯缺少cython於是執行後面的命令)
apt-get install cython
cd numpy
python setup.py install)
2.6、CPU版的執行程式
全部安裝完後,再次執行
python deep_q_network.py
畫面不會卡頓,cpu版本會立刻出現結果(筆者這裡第一次時候沒有執行root,會報錯,同學們切記執行上條命令前一定要root了!)
PS:按照FlappyBird安裝教程安裝,可以直接應用在”學梵高作畫”的教程裡,兩者可以通用!
參考文獻
- 教你從頭到尾利用DL學梵高作畫:GTX 1070 cuda 8.0 tensorflow gpu版
- 5月深度學習班學員小蔡同學寫的簡易教程:用MAC DQN玩Flappy Bird
- https://github.com/yenchenlin/DeepLearningFlappyBird
後記
七月線上開發/市場團隊,二零一六年十月十三日。
相關文章
- PaddlePaddle版Flappy-Bird—使用DQN演算法實現遊戲智慧APP演算法遊戲
- DQN(Deep Q-learning)入門教程(六)之DQN Play Flappy-bird ,MountainCarAPPAI
- MFC實現桌面版Flappy BirdAPP
- 教你用 HTML5 製作Flappy Bird(上)HTMLAPP
- 教你用HTML5製作Flappy Bird(一)HTMLAPP
- 教你用HTML5製作Flappy Bird(二)HTMLAPP
- DQN(Deep Q-learning)入門教程(四)之Q-learning Play Flappy BirdAPP
- Flappy Bird下架的真相APP
- Flappy Bird 惡意程式詳細分析APP
- Flappy Bird 8月將重返App StoreAPP
- 玩遊戲學程式設計:Code.org推出Flappy Bird程式設計課遊戲程式設計APP
- 從頭到尾談一下HTTPSHTTP
- 從頭到尾完成首個 JSP 程式JS
- Flappy Bird 的啟示:不要相信成功學APP
- Flappy Bird的啟示:不要相信成功學APP
- 如何從頭到尾做一個UI元件庫UI元件
- 十一、從頭到尾解析Hash表演算法演算法
- 程式設計師帶你一步步分析 AI 如何玩 Flappy Bird程式設計師AIAPP
- 65行 JavaScript 程式碼實現 Flappy Bird 遊戲JavaScriptAPP遊戲
- Scratch3之AI整合 - flappy bird AI版本AIAPP
- 從頭到尾徹底解析Hash表演算法演算法
- Flappy Bird成功之道:極簡設計 貴人相助APP
- 從頭到尾擼一遍Flutter的一切...Flutter
- 劍指OFFER-從頭到尾列印連結串列(Java)Java
- Eclipse點選空格總是自動補全程式碼怎麼辦,如何自動補全程式碼,程式碼提示Eclipse
- Flappy Bird開發者接受採訪,解釋上癮的危害APP
- 讓你從頭到尾把promise整的明明白白Promise
- 我們們從頭到尾說一次 Java 垃圾回收Java
- JAVA專案:Java實現飛揚的小鳥(Flappy Bird)JavaAPP
- 教你玩轉Linux—yum 命令Linux
- PHP如何更好的利用PHPstorm的自動提示PHPORM
- 教你如何利用python呼叫攝像頭Python
- 【機器學習PAI實戰】—— 玩轉人工智慧之利用GAN自動生成二次元頭像機器學習AI人工智慧二次元
- 大紅大紫的獨立製作遊戲 Flappy Bird 將要下架了遊戲APP
- 線段樹 - 多組圖帶你從頭到尾徹底理解線段樹
- 教你從頭寫遊戲伺服器框架遊戲伺服器框架
- 趣頭條矩陣運營助手,分發多個自媒體賬號,教你玩自媒體矩陣矩陣
- U3D遊戲開發從入門到彎道超車(2):《Flappy Bird》場景動畫及角色動畫製作3D遊戲開發APP動畫