教你從頭到尾利用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
- DQN(Deep Q-learning)入門教程(四)之Q-learning Play Flappy BirdAPP
- Flappy Bird 惡意程式詳細分析APP
- Scratch3之AI整合 - flappy bird AI版本AIAPP
- 從頭到尾談一下HTTPSHTTP
- 如何從頭到尾做一個UI元件庫UI元件
- JAVA專案:Java實現飛揚的小鳥(Flappy Bird)JavaAPP
- Eclipse點選空格總是自動補全程式碼怎麼辦,如何自動補全程式碼,程式碼提示Eclipse
- 劍指OFFER-從頭到尾列印連結串列(Java)Java
- 從頭到尾擼一遍Flutter的一切...Flutter
- U3D遊戲開發從入門到彎道超車(2):《Flappy Bird》場景動畫及角色動畫製作3D遊戲開發APP動畫
- 讓你從頭到尾把promise整的明明白白Promise
- 我們們從頭到尾說一次 Java 垃圾回收Java
- 教你玩轉Linux—yum 命令Linux
- 我們們從頭到尾說一次優雅關閉
- 教你如何利用python呼叫攝像頭Python
- 還在人工煉丹?自動提示工程指南來了,還帶從頭實現
- 線段樹 - 多組圖帶你從頭到尾徹底理解線段樹
- 【機器學習PAI實戰】—— 玩轉人工智慧之利用GAN自動生成二次元頭像機器學習AI人工智慧二次元
- 趣頭條矩陣運營助手,分發多個自媒體賬號,教你玩自媒體矩陣矩陣
- Java集合詳解6:這次,從頭到尾帶你解讀Java中的紅黑樹Java
- 教你從頭寫遊戲伺服器框架遊戲伺服器框架
- nodejs 自動程式碼提示NodeJS
- 前端技術分享:教你玩轉vue-router命令檢視前端Vue
- 利用tox打造自動自動化測試框架框架
- Element 利用Tooltip提示框實現動態顯示文字提示
- 利用apidoc自動生成model文件API
- 教你使用SQLite Autoincrement(自動遞增)SQLiteREM
- 怎樣利用GoogleAdsense自動賺錢?Go
- 如何利用showdoc自動生成API文件API
- Python利用Selenium自動登入掘金Python
- 利用LSTM自動生成中文文字
- 利用 GitHub Action 自動釋出 DockerGithubDocker
- 小邵教你玩轉Typescript、ts版React全家桶腳手架TypeScriptReact
- 手把手教你玩轉HarmonyOS版地圖應用開發地圖
- 5 步輕鬆上手,教你從 0 到 1 落地 Jmeter 介面自動化指令碼!JMeter指令碼
- 如何在iOS 12和macOS Mojave中使用安全程式碼自動填充iOSMac
- 終端自動補全命令