为了不影响画质,就不做太多的压缩了,上面是迭代3200次后生成的图片,但实际看上去,到80次后,图片就没有什么变化了,下面是原始图片和风格图片

原始图片取自老师的推特

风格图片来自自梵高

只能说真是的看颜值的,另外还用了几张同事的照片来生成,但结果都很难看。

钓鱼的部分结束,下面是正文。

最近是在这篇文章里又看到的介绍:https://www.r-bloggers.com/lang/chinese/2400

源码:https://github.com/ckmarkoh/neuralart_tensorflow

主要是配置CUDA和cuDNN,过程有点麻烦,记录下,以便在另一台机子上折腾时可以参考。

软件配置

CUDA及cuDNN,Ubuntu 16.04,Anaconda,Tensorflow-gpu

CUDA(v8.0)和cuDNN(cuDNN v5.1 for CUDA 8.0)都得从老黄的网站上下载,在下载cuDNN前还要写一份问卷,必须注册英伟达开发者账号。系统最好选Linux,windows只支持Python 3.5的环境,许多软件不兼容,只能用特殊处理过的,macOS只能用黑苹果来驱动新显卡,桌面系统会占用部分显卡资源,我用的是Ubuntu server版本。

CUDA:https://developer.nvidia.com/cuda-downloads

cuDNN:https://developer.nvidia.com/rdp/cudnn-download

Anaconda:https://www.continuum.io/downloads#linux

硬件要求

显卡需要计算能力3.0以上,其他部分可以随意。

关于显卡计算能力,可以参考这个页面:https://developer.nvidia.com/cuda-gpus

我的硬件配置是amd 速龙x4 870k CPU,4GB内存,GTX750ti 2G DDR5(计算能力5.0),320GB硬盘,额定400w电源,还需要注意散热,跑这个程序会让显卡完全满载,GTX1070都瑟瑟发抖。

环境配置

先准备好可以穿墙的环境,详情参阅博客中的其他教程

1.CUDA可以使用本地安装或者网络安装,如果网络太差,还是先下载后安装吧

2.显卡驱动在安装CUDA时会一并安装,目前nvidia-375(当前版本为375.66)是长期维护版本,可以使用这个ppa

1
sudo add-apt-repository ppa:graphics-drivers/ppa

如果遇到这种问题

1
/sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 is not a symbolic link

参考Stackoverflow:http://stackoverflow.com/questions/43016255/libegl-so-1-is-not-a-symbolic-link

该文件不是符号链接,只需要把这个文件备份,删除,然后将对应动态链接库链接到libEGL.so.1即可,如果仅安装了64位程序,可以忽略lib32

1
2
3
4
sudo mv /usr/lib/nvidia-375/libEGL.so.1 /usr/lib/nvidia-375/libEGL.so.1.org
sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org
sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.66 /usr/lib/nvidia-375/libEGL.so.1
sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.66 /usr/lib32/nvidia-375/libEGL.so.1

完成后的指向关系为libEGL.so -> libEGL.so.1->libEGL.so.375.39

3.安装后,配置CUDA环境变量,这里只设置下可执行程序路径,动态链接库配置在/etc/ld.so.conf.d/cuda-8-0.conf文件中

1
2
3
4
#cuda
export CUDA_HOME=/usr/local/cuda
export CUDA_BIN=/usr/local/cuda/bin
export PATH=$CUDA_BIN:$PATH

4.安装cuDNN时,把解压后的头文件与动态链接库分别放入/usr/local/cuda/include/usr/local/cuda/lib64,如果要更换其他版本的cuDNN,可以把对应头文件与动态链接库文件直接替换就行

5.使用Anaconda来管理Python开发环境,比virtualenv好用一点,自带了很多的第三方库,常用命令

1
2
3
conda create -n tensor
source activate tensor
source deactive

6.安装Tensorflow-gpu,可以在这里看到详细教程

https://www.tensorflow.org/install/install_linux

当然,也可以直接配置python源来安装,在用户目录下新建.pip文件夹,在文件中新建pip.conf文件,把豆瓣的源填进去

1
2
3
4
5
[global]
timeout = 6000
[install]
use-mirrors = true
mirrors = https://pypi.douban.com/simple

用pip直接安装tensorflow-gpu即可

7.Tensorflow也开发了Go,C以及Java的接口,需要配置动态链接库,在这里可以看到详细教程

https://www.tensorflow.org/install/install_go

8.CUDA template

samples/0_Simple/template文件夹中是一个最小的CUDA项目模版,在Makefile中引入了samples/common/inc中的头文件,如果单独,将项目复制出来,在构建时会出错,将common文件夹复制到/usr/local,并设置CPATH,示例如下

1
export CPATH=$CUDA_HOME/include:/usr/local/common/inc:$CPATH

然后删除掉Makefile中对common/inc的引用,下面给出一个最小化的Makefile,这里指定SM为5.0

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
NVCC := nvcc -ccbin g++ -m64
GENCODE_FLAGS := -gencode arch=compute_50,code=compute_50
# Target rules
all: build

build: template

template.o:template.cu
    $(NVCC) $(GENCODE_FLAGS) -o $@ -c $<

template_cpu.o:template_cpu.cpp
    $(NVCC) $(GENCODE_FLAGS) -o $@ -c $<

template: template.o template_cpu.o
    $(NVCC) $(GENCODE_FLAGS) -o $@ $+

run: build
    ./template

clean:
    rm -f template template.o template_cpu.o

但刚刚在ubuntu 17.04上,用apt命令直接搜索出了cuda相关的软件,可以使用apt命令安装,效果和手动配置一样,cuDNN还是需要手动安装。

1
sudo apt install nvidia-cuda-toolkit cuda-samples-8-0

最后说一句,别再想着从源代码编译tensorflow,太麻烦了。