(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得

作者:老宅

时间: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确实有中文版,而且,可以在后面安装的过程中选在安装中文版,但是经本人实践发现:当你选择中文安装界面之后,在安装显卡驱动时,输入相应的命令,系统的反馈时菱形,具体原因这里不解释,借鉴教程的一句话:外来的和尚会念经

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第1张图片

 

硬件驱动:Linux版GTX1070驱动

 

下载地址:http://www.geforce.cn/drivers

下图为笔者操作界面:

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第2张图片

 

在出现的结果中,笔者使用的是367.44,如图

 

 

CUDA 8.0

只要是了解DL的人,肯定都知道CUDA8.0,所以

官网下载:https://developer.nvidia.com/cuda-toolkit

看图:

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第3张图片

点击那个硕大的绿色的 DOWNLOAD,进入如下页面:

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第4张图片

然后,页面下部——>依次点击:Linux,x86_64,Ubuntu,14.04,runfile(local),然后,如下图:

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第5张图片

点击Download(1.4GB)

后面就不用我多说了,你不可能是连下载都不会的超级小白。

 

 

cudnn准备

首先,心里准备:比之前麻烦一点点,因为他家网站让你注册,然后填写个什么问卷。

地址:https://developer.nvidia.com/cudnn

 点击进入后如下图:

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第6张图片

先点击Register,然后是下面的页面:

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第7张图片

点击Join now,然后进入下面页面:

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第8张图片

然后,就是该填写信息了,这里笔者废句话:为啥他们要求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,如下图

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第9张图片

4) 将命令框图标拖动到左边栏里或者桌面,以便使用。

5) 点击Terminal,然后

输入:sudo -i

输入 :开机密码 ,回车

输入  sudo apt-get install vim

          sudo vi /etc/default/grub

(这里的输入,注意必要的空格)

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第10张图片

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是文字界面。

      重启后进入字符界面,

      按照提示输入你的用户名,回车

      输入密码,回车

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第11张图片

    输入sudo  -i,回车

    输入密码,回车

    此时,需要使用linux的cd命令,这时需要输入下面命令:

    cd /home/[输入到这里时,可点击Tab键,系统会自动匹配]/Desktop/   回车   (注意:Desktop后面的 / 符号,务必要输入)

    这时输入 ls

    会显示刚才拷贝到桌面上的三个文件名称

    然后,输入

     chmod +x NVIDIA-LIN…(这个按Tab键自动匹配) 回车

     再次输入

     ./NV...(这个按Tab键自动匹配) 回车

刚才的操作如下图:

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第12张图片

按回车键后出现

…………………………………………………………………………………………………………………………………………………………………………………………………………………………….

说明开始安装

 

期间会出现数次让你选择的字样,你们看,每次操作请各位仔细看,这里老宅不再多说,只要英语水平够,操作不是问题,基本都是左右方向键+回车。

 

 

下面,以同样操作安装CUDA8.0,在完成了

chmod +x cuda[此时点击Tab键] 回车

./cuda[此时点击Tab键] 回车

之后,系统会先有一段长长的协议,阅读这段协议,需要你按住空格键,系统的提示文字会自动滚屏,直到出现

如下图字样:accept/decline/quit:

此时输入:accept 回车

根据系统提示,并不是一路需要输入y,而是如下图,第一个需要输入

n 回车

这里需要注意其中一个地方需要填写N才行,不能写Y。如图

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第13张图片

其余操作如图

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第14张图片

然后回车等待就行

 

顺利的话,等待可能不到一分钟就可完成安装。

这时,需要输入

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  回车

此时,如果安装没有问题,这里有句名言:没有答案就是最好的情况

系统会出现‘>>>’的显示,说明一切正常,效果如下图

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第15张图片

说明安装成功,一切正常。

但是,博主曾碰到过这样的问题,如下图:

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第16张图片

再然后,操作如下:

在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

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第17张图片

2.接下来,下载vgg19:
http://www.vlfeat.org/matconvnet/models/beta16/imagenet-vgg-verydeep-19.mat

然后,把vgg放到neural-style的文件夹根目录下

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第18张图片

现在,在命令窗口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次候,计算机成了梵高的徒弟,不过,是个特别实诚的“傻徒弟”,具体原因,先看下面对比图:

首先,是让计算机学习的《星空》

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第19张图片

 

然后,是计算机学习之后要修改的我个人的摄影作品《火炬》

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第20张图片

最后,迭代1000次候,得到了下面这幅“画作”

(Ubuntu+Tensorflow+CUDA8.0+cudnn,新鲜靠谱版)利用DL学梵高作画---实战记录和心得_第21张图片

 

————————————分割线——————————————

下面是博主对于这次练习的几点体会,也许对于小白的你会有一定的帮助:

1.使用Linux,相比用惯了windows的你来说,上手是需要一定的开发经验的,如果不是抱着对专业学习极大的热爱之情在学习,相信你很快就会对Linux失去兴趣,博主在调试Ubuntu时,翻阅了大量的网上相关“教程”,发现很多敢于吃螃蟹的第一人在初尝整套配置时,有的竟前后折腾了一周之久,来来回回反复安装、调试、测试。。。。。。,相信,初尝Linux的你的世界观一定会在Linux的影响下有所改变。。。。

2.经博主测试,本次“作画”所使用的content文件,即,你需要改变的图片的体积,是对计算机显存有一定要求的,楼主第一次放入的照片体积大于1.0MB,计算机刚刚开始计算及发生了内存溢出。博主完成测试用的图片是经压缩后,体积下降到了100+KB。

3.为什么说计算机是个特别实诚的“傻徒弟”?仔细对比上面三幅图就会直到,《星空》的主色调时蓝色,画面中带有光晕的星星时金黄色,也就是说,虽然历史上传言梵高精神存在问题,他看到的世界与常人不同,但,至少他看到的世界在他眼中的颜色是正常的,即,他在《星空》中描绘的画面,普通人看来,颜色也是正常的。也就是说,如果让梵高本人观察和重画我们要修改的这幅《火炬》,我相信梵高应该采用的描绘《火炬》的主色调应该是红色,而不是蓝色,也就是说,如果计算机是一个“聪明”的徒弟,它看到这幅《火炬》,会按照梵高的绘画方式而不是用色方式,来重画这幅画。从专业角度讲,即:计算机使用这里我们做实验用的DL算法进行学习的时候,不仅学会了《星空》的纹理特征,也学会了《星空》的颜色特征,因此,才出现了带有《星空》的颜色特征的《火炬》。所以,博主认为,这里实验用的DL算法,还有极大的改进空间,具体的修改方法,楼主将在以后的博文中做讲解。

 

完。

PPPS:有问题的,可以跟贴问老宅。

你可能感兴趣的:(人工智能与机器学习)