作者:老宅
时间: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:有问题的,可以跟贴问老宅。