作者:老宅
時間:2017年3月
硬件:Core i7-6700;16GB;Nvidia GeForce GTX1070;500G SSD (PS:搞DL的實戰必須用好平臺,這裏就不多廢話了)
平臺:臺式PC
軟件:Linux 對應的GTX1070驅動;cuda8.0;cudnn 5.1;GPU支持的Tensorflow;Linux 14.04 LTS
這裏首先要提一句,因爲博主寫這篇文章的時間是2017年的3月,至今爲止,文中的部分連接已經失效,比如,Tensorflow的地址可以改爲清華的鏡像站:https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/gpu/
前言——網上諸多“教程“的一些個人看法
首先,老宅的這次DL實踐,借鑑的教程來自CSDN大神,七月在線的CEO——July在2016帶領公司另外兩位同事搞出來的,教程原址:
http://blog.csdn.net/v_july_v/article/details/52658965,原文叫做《教你從頭到尾利用DL學梵高作畫》。
前人栽樹,後人乘涼。我的DL實踐就是在這篇教程的指導下起步的,本文部分圖片借鑑原圖。
實驗最後成功了,通過1000次迭代,確實,計算機學會了梵高的作畫方式,後面會貼出作畫的效果圖。
在本文的最後,會講一講我對使用DL教計算機學習作畫的一些理解和考慮日後所要做的一些改進,這個寫在最後。
————————————————————分割線——————————————————————
再羅嗦一句:個人理解,Linux就是極客們搞出的一個怪胎,如果你是純小白,那,,,做好心理準備吧,這次起步,我倒騰了好久好久。。。
再再羅嗦一句:一定要按本文的順序來操作,謙虛、謹慎、客觀、老實的操作。。。
再再再羅嗦一句:請認真的體會這句話——如果你想在技術的廣度和深度上再上一個層面,良好的英語水平和高等數學的基礎都是必選項。不認可?那麼往下看!
一、軟件下載和準備
操作系統:大企鵝Ubuntu14.04。
安裝方式:U盤安裝
準備方式:一個8G的空U盤,從ubuntu官網下載ubuntu14.04LTS版。
LTS理解爲時 ,long time trusty,所以,本教程強烈推薦,
下載地址:http://www.ubuntu.com/download/alternative-downloads(下載地址,選擇64位下載)
這裏講一句:必須用英文版,ubuntu確實有中文版,而且,可以在後面安裝的過程中選在安裝中文版,但是經本人實踐發現:當你選擇中文安裝界面之後,在安裝顯卡驅動時,輸入相應的命令,系統的反饋時菱形,具體原因這裏不解釋,借鑑教程的一句話:外來的和尚會念經
硬件驅動:Linux版GTX1070驅動
下載地址:http://www.geforce.cn/drivers
下圖爲筆者操作界面:
在出現的結果中,筆者使用的是367.44,如圖
CUDA 8.0
只要是瞭解DL的人,肯定都知道CUDA8.0,所以
官網下載:https://developer.nvidia.com/cuda-toolkit
看圖:
點擊那個碩大的綠色的 DOWNLOAD,進入如下頁面:
然後,頁面下部——>依次點擊:Linux,x86_64,Ubuntu,14.04,runfile(local),然後,如下圖:
點擊Download(1.4GB)
後面就不用我多說了,你不可能是連下載都不會的超級小白。
cudnn準備
首先,心裏準備:比之前麻煩一點點,因爲他家網站讓你註冊,然後填寫個什麼問卷。
地址:https://developer.nvidia.com/cudnn
點擊進入後如下圖:
先點擊Register,然後是下面的頁面:
點擊Join now,然後進入下面頁面:
然後,就是該填寫信息了,這裏筆者廢句話:爲啥他們要求13歲以上呢?
後面就是問答頁面了,考驗你英語基本讀和理解能力的地方到了。所以,如前文所說,英語好一點在技術晉級時是必選項。
然後:重點來了:本文采用的Tensorflow是網絡安裝,pip install 方式。經筆者多次實踐,諸多tensorflow的安裝方式,比如bazel,比如anaconda,安裝過程要麼需要某種workspace,要麼就是哪裏設置不小心,導致安裝位置不對等等,對於小白的你,使用pip install的方式最靠譜,也入手最快。
二、平臺搭建
下面,是具體平臺搭建過程:
首先,鳴謝百度經驗上傳者,以及百度經驗的最初產品設計者和開發者。
U盤系統盤及安裝教程:http://jingyan.baidu.com/article/eb9f7b6d8536a8869364e813.html
這裏注意幾點:
首先,筆者的臺式PC使用華碩主板,該主板有一個UEFI模式,有興趣的你可以深扒一下該模式的優勢。
筆者的實踐經驗對比表明,UEFI模式比非UEFI模式更快啓動安裝狀態,而且安裝時不使用系統自帶顯卡驅動。
第二:切記!!!使用 英文安裝。
第三:安裝時的具體分區操作請自行百度。
驅動需要在字符界面下安裝
步驟:
(1)進入Ubuntu圖形界面
(2)插入U盤,將內容拷貝至Desktop文件下
(3)點擊左上角,輸入terminal,如下圖
(4) 將命令框圖標拖動到左邊欄裏或者桌面,以便使用。
(5) 點擊Terminal,然後
輸入:sudo -i
輸入 :開機密碼 ,回車
輸入 sudo apt-get install vim
sudo vi /etc/default/grub
(這裏的輸入,注意必要的空格)
(6) 此時系統會進入一個文本頁面(這就是傳說中的Vim)。
在第20行前後會出現
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"。
將光標移動到這個命令最前端,
然後鍵盤點擊Esc鍵,再點擊y鍵兩次,點一下p鍵。
就會將本條指令複製一個放到下一行。然後點擊i鍵,就能進行編輯了,
在本行命令前面添加#號,然後移動到複製出來的那條,
修改quiet splash爲text,按Esc鍵。
Shift +:,輸入wq,回車。
此時會調回命令框界面,
輸入sudo update-grub,回車
輸入sudo reboot,回車。
隨後,系統重啓,如果你在安裝Ubuntu時,計算機原有一個其他系統,那麼重啓後首先會遇到一個選擇界面,
這時選擇*Ubuntu,即可進入系統,由於之前的操作,本次登錄Ubuntu是文字界面。
重啓後進入字符界面,
按照提示輸入你的用戶名,回車
輸入密碼,回車
輸入sudo -i,回車
輸入密碼,回車
此時,需要使用linux的cd命令,這時需要輸入下面命令:
cd /home/[輸入到這裏時,可點擊Tab鍵,系統會自動匹配]/Desktop/ 回車 (注意:Desktop後面的 / 符號,務必要輸入)
這時輸入 ls
會顯示剛纔拷貝到桌面上的三個文件名稱
然後,輸入
chmod +x NVIDIA-LIN…(這個按Tab鍵自動匹配) 回車
再次輸入
./NV...(這個按Tab鍵自動匹配) 回車
剛纔的操作如下圖:
按回車鍵後出現
…………………………………………………………………………………………………………………………………………………………………………………………………………………………….
說明開始安裝
期間會出現數次讓你選擇的字樣,你們看,每次操作請各位仔細看,這裏老宅不再多說,只要英語水平夠,操作不是問題,基本都是左右方向鍵+回車。
下面,以同樣操作安裝CUDA8.0,在完成了
chmod +x cuda[此時點擊Tab鍵] 回車
./cuda[此時點擊Tab鍵] 回車
之後,系統會先有一段長長的協議,閱讀這段協議,需要你按住空格鍵,系統的提示文字會自動滾屏,直到出現
如下圖字樣:accept/decline/quit:
此時輸入:accept 回車
根據系統提示,並不是一路需要輸入y,而是如下圖,第一個需要輸入
n 回車
這裏需要注意其中一個地方需要填寫N才行,不能寫Y。如圖
其餘操作如圖
然後回車等待就行
順利的話,等待可能不到一分鐘就可完成安裝。
這時,需要輸入
sudo vi /etc/default/grub
出現文本界面,也就是剛纔修改quiet splash 爲text的地方
如前所示,以相反的操作。
點擊 i鍵
將帶有quiet splash那行代碼前面的 # 刪掉
將剛纔複製出來的,修改成帶有text的哪行代碼前,加 #
然後,點擊Esc鍵,
點擊Shift + : 回車
輸入 wq 回車
此時,再次輸入 sudo update-grub 回車
sudo reboot 回車
等待系統重啓
下面是將桌面上的cudnn安裝進Ubuntu
在系統重新啓動後,點擊Terminal
輸入sudo -i 回車
輸入登錄密碼 回車
輸入
cd /home/***(自己的用戶名)/Desktop/ 回車
輸入
tar xvzf cudnn-8.0-linux-x64-v5.1-ga.tgz 回車
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* 回車
至此,前期準備工作都已完成。
下面,輸入如下命令:
sudoapt-get install python-pip python-dev Python-scipy Python-numpy Git
由於使用Bazel等等其他工具安裝Tensorflow總是要事先配置各種各樣的環境,博主作爲一個懶人,在認真看了Tensorflow的安裝提示後,總結了一種安裝方法,請務必按照下文的順序輸入代碼並及時回車!
首先,輸入
python --version 回車
然後,輸入如下(看清,不要錯):
sudo pip install https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.1-cp27-none-linux_x86_64.whl 回車
接下來的等待時間就看你的網速了。。。。。。
待安裝完成後,可以測試一下tensorflow是否能夠正常使用
測試方法如下:
輸入
python 回車
觀察一下系統反饋,一般不會出錯。如果有error字樣,可跟貼本博客,博主會爲你解答。
輸入如下代碼:
import tensorflow as tf 回車
此時,如果安裝沒有問題,這裏有句名言:沒有答案就是最好的情況
系統會出現‘>>>’的顯示,說明一切正常,效果如下圖
說明安裝成功,一切正常。
但是,博主曾碰到過這樣的問題,如下圖:
再然後,操作如下:
在Terminal中輸入
sudo vim ~/.bashrc 回車
輸入(先點擊按鍵i)
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64" 回車
export CUDA_HOME=/usr/local/cuda 回車
然後,按Esc,
然後,Shift + : ,
輸入 wq 回車
在輸入 source ~/.bashrc 回車
問題徹底解決。
全部安裝過程就到這裏了。下面是教計算機學梵高作畫的過程:
三、實驗:模仿梵高繪畫
1.neural-style下載
在這個github網站下載相應代碼:https://github.com/anishathalye/neural-style
2.接下來,下載vgg19:
http://www.vlfeat.org/matconvnet/models/beta16/imagenet-vgg-verydeep-19.mat
然後,把vgg放到neural-style的文件夾根目錄下
現在,在命令窗口cd /home/***(你自己的用戶名)/Desktop/
git clone https://github.com/anishathalye/neural-style.git
接着你就能在桌面打開這個文件夾了
把你想修改的照片放入example文件夾內,然後在剛纔的窗口命令接着輸入:
python neural_style.py --content ./examples/***.jpg (此括號內不要複製:***代表你想要使用的圖片名稱) --styles ./examples/ 1-style.jpg (此括號內不要複製:1-style.jpg是梵高星空圖片在文件夾內名稱,你也可以換其他的風格,改名稱就行了) --output ./examples/$$$.jpg (此括號內不要複製:$$$代表你想要生成的圖片名稱)
例如我的輸入如下python neural_style.py --content ./examples/1-content.jpg --styles ./examples/1-style.jpg --output./examples/1-output.jpg
接下來,時博主的實驗效果
在計算機學到梵高作品星空的風格之後,讓計算機對指定圖片進行梵高式處理,在迭代1000次候,計算機成了梵高的徒弟,不過,是個特別實誠的“傻徒弟”,具體原因,先看下面對比圖:
首先,是讓計算機學習的《星空》
然後,是計算機學習之後要修改的我個人的攝影作品《火炬》
最後,迭代1000次候,得到了下面這幅“畫作”
————————————分割線——————————————
下面是博主對於這次練習的幾點體會,也許對於小白的你會有一定的幫助:
1.使用Linux,相比用慣了windows的你來說,上手是需要一定的開發經驗的,如果不是抱着對專業學習極大的熱愛之情在學習,相信你很快就會對Linux失去興趣,博主在調試Ubuntu時,翻閱了大量的網上相關“教程”,發現很多敢於吃螃蟹的第一人在初嘗整套配置時,有的竟前後折騰了一週之久,來來回回反覆安裝、調試、測試。。。。。。,相信,初嘗Linux的你的世界觀一定會在Linux的影響下有所改變。。。。
2.經博主測試,本次“作畫”所使用的content文件,即,你需要改變的圖片的體積,是對計算機顯存有一定要求的,樓主第一次放入的照片體積大於1.0MB,計算機剛剛開始計算及發生了內存溢出。博主完成測試用的圖片是經壓縮後,體積下降到了100+KB。
3.爲什麼說計算機是個特別實誠的“傻徒弟”?仔細對比上面三幅圖就會直到,《星空》的主色調時藍色,畫面中帶有光暈的星星時金黃色,也就是說,雖然歷史上傳言梵高精神存在問題,他看到的世界與常人不同,但,至少他看到的世界在他眼中的顏色是正常的,即,他在《星空》中描繪的畫面,普通人看來,顏色也是正常的。也就是說,如果讓梵高本人觀察和重畫我們要修改的這幅《火炬》,我相信梵高應該採用的描繪《火炬》的主色調應該是紅色,而不是藍色,也就是說,如果計算機是一個“聰明”的徒弟,它看到這幅《火炬》,會按照梵高的繪畫方式而不是用色方式,來重畫這幅畫。從專業角度講,即:計算機使用這裏我們做實驗用的DL算法進行學習的時候,不僅學會了《星空》的紋理特徵,也學會了《星空》的顏色特徵,因此,纔出現了帶有《星空》的顏色特徵的《火炬》。所以,博主認爲,這裏實驗用的DL算法,還有極大的改進空間,具體的修改方法,樓主將在以後的博文中做講解。
完。
PPPS:有問題的,可以跟貼問老宅。