TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。
TensorFlow可被用于语音识别或图像识别等多项机器深度学习领域,对2011年开发的深度学习基础架构DistBelief进行了各方面的改进,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。TensorFlow将完全开源,任何人都可以用。
安装相关环境和工具
sudo apt-get install python-pip python-dev python-virtualenv
为tensorflow创建一个专用的virtualenv
virtualenv --system-site-packages ~/tensorflow
进入该virtualenv中进行编程
cd ~/tensorflow
source bin/activate
安装最新版本的tensorflow
tensorflow)$ pip install --upgrade tensorflow
//如果pip版本小于8需升级 Pip install -U pip
以后编写tensorflow程序只要执行下面两句即可
cd ~/tensorflow
source bin/activate
退出环境使用下面的语句
deactivate
接下来我们就用TensorFlow上一个风格迁移的例子,来看一下运行效果
风格迁移(Style Transfer)是深度学习众多应用中非常有趣的一种,如图,我们可以使用这种方法把一张图片的风格“迁移”到另一张图片上:
而快速风格迁移可以不把生成图片当做一个“训练”的过程,而当成一个“执行”的过程。下面这篇论文就对快速风格迁移(fast neural style transfer)进行了阐述:Perceptual Losses for Real-Time Style Transfer and Super-Resolution
快速风格迁移的网络结构包含两个部分。一个是“生成网络”(原文中为Transformation Network),一个是“损失网络”(Loss Network)。生成网络接收一个图片当做输入,然后输出也是一张图片(即风格迁移后的结果)。如下图,左侧是生成网络,右侧为损失网络:
训练阶段:首先选定一张风格图片。训练的目标是让生成网络可以有效生成图片。目标由损失网络定义。
执行阶段:给定一张图片,将其输入生成网络,输出这张图片风格迁移后的结果。
我们可以发现,在模型的“执行”阶段我们就可以完成风格图片的生成。因此生成一张图片的速度非常块,在GPU上一般小于1秒,在CPU上运行也只需要几秒的时间。
接下来为大家介绍Github上一个用Tensor实现快速风格迁移的例子, Github地址:hzy46/fast-neural-style-tensorflow
具体编程实现可以看工程源码,在这里,我们用训练好的模型做过演示
关于训练好的模型可以从百度云中下载 http://pan.baidu.com/s/1mi9Ilyo
下载后将models文件夹放在工程fast-neural-style-tensorflow-master的根目录下
然后用训练好的模型进行实现快速风格迁移
python eval.py --model_file .ckpt-done> --image_file img/test.jpg
your path to wave.ckpt-done 是所用模型的路径
img/test.jpg 是测试图片的路径
原始图片:
风格迁移后的图片: (generated/res.jpg)
以上是在虚拟机的ubuntu上跑的,生成图片需要10s左右。
随着TensorFlow的不断改进,TensorFlow现在已经是github上star最多的机器学习项目了,有兴趣的同学按照上文所介绍的方法,安装好TensorFlow,然后把这个风格迁移的demo跑一下。(特别感谢风格迁移项目的作者,这里再贴其开源项目下地址:hzy46/fast-neural-style-tensorflow)