2015年九月的时候出现了一篇很趣的论文《A Neural Algorithm of Artistic Style》。论文中提出了一种算法,可以将一张普通的图片,转换成具有某种艺术家的风格。
用语言来描述计算流程如下:
1、首先用一个给定参数的卷积神经网络(VGG网络),将原始的内容图片和风格图片进行函数映射,这个任务不需要网络后面的全连接层,只需要中间一些卷积层的输出即可,而且将网络中的max_pool改成了avg_pool。
2、可以利用这些中间输出,将其定义为内容输出和风格输出。内容输出是网络中较上层的映射结果,而风格输出是一些较低层映射的相关矩阵,用一个Gram矩阵计算表示。
3、将内容图片加噪音,这个将做为网络的输入,将网络的输出和内容输出进行对比,计算出内容损失函数(像素值取差值,再平方和),和风格输出进行对比,计算出风格损失函数,再整合两个损失形成总损失。
4、训练目标是总损失最小化,训练参数是第3步中的输入图片,这样得到一个图片,使内容和原来的内容图片相似,而风格和风格图片一致。
内容图片如下:
风格图片如下:
初始的输入是一个内容图片加噪音:
最后结果图片如下:
参考资料:
http://arxiv.org/pdf/1508.06576v2.pdf
https://github.com/ckmarkoh/neuralart_tensorflow
具体方法如下面代码所示,
星期四, 九月 29, 2016
星期二, 六月 28, 2016
TensorFlow初体验
以前玩深度学习一直是用的theano和keras,做为谷粉不能不试一下大热的TensorFlow。首先安装起来。
TensorFlow的安装指南非常详细,我是python的anaconda环境,所以直接先创建一个新环境,创建前先更新一下conda
conda update conda
conda update anaconda
看一下目前计算机上有哪些环境
conda info --env
目前只有root环境,所以新建一个专门为TensorFlow的环境,并将root中的包克隆过来
conda create --name tensorflow --clone root
激活使用环境
source activate tensorflow
退出环境
source deactivate
使用pip来安装
pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0-py2-none-any.whl
然后我们可以使用jupyter notebook来启动,下面是两个最简单的示例。
TensorFlow的安装指南非常详细,我是python的anaconda环境,所以直接先创建一个新环境,创建前先更新一下conda
conda update conda
conda update anaconda
看一下目前计算机上有哪些环境
conda info --env
目前只有root环境,所以新建一个专门为TensorFlow的环境,并将root中的包克隆过来
conda create --name tensorflow --clone root
激活使用环境
source activate tensorflow
退出环境
source deactivate
使用pip来安装
pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0-py2-none-any.whl
然后我们可以使用jupyter notebook来启动,下面是两个最简单的示例。
星期四, 六月 09, 2016
标签传播算法
因为标注成本比较高,当你的训练数据集只有一部分数据是有标注的情况下,使用监督学习你只能扔掉那些没有标注的X。而实际上,有标注的样本和无标注的样本之间是有关系的,这种关系信息也可以用来帮助学习。这就是半监督学习标签传播(Label Propagation)算法的思路。
它的基本逻辑是借助于近朱者赤的思路,也就是KNN的思路,如果A和B在X空间上很接近,那么A的Y标签就可以传给B。进一步迭代下去,如果C和B也很接近,C的标签也应该和B一样。所以基本计算逻辑就是两步,第一步是计算样本间的距离,构建转移矩阵,第二步是将转移矩阵和Y矩阵相乘,Y里面包括了已标注和未标注的两部分,通过相乘可以将已标注的Y转播给未标注的Y。具体论文可以看这里。在sklearn模块中已经内置了这种算法,文档示例可以看这里。下面是用python的numpy模块实现的一个toy demo。
它的基本逻辑是借助于近朱者赤的思路,也就是KNN的思路,如果A和B在X空间上很接近,那么A的Y标签就可以传给B。进一步迭代下去,如果C和B也很接近,C的标签也应该和B一样。所以基本计算逻辑就是两步,第一步是计算样本间的距离,构建转移矩阵,第二步是将转移矩阵和Y矩阵相乘,Y里面包括了已标注和未标注的两部分,通过相乘可以将已标注的Y转播给未标注的Y。具体论文可以看这里。在sklearn模块中已经内置了这种算法,文档示例可以看这里。下面是用python的numpy模块实现的一个toy demo。
星期三, 六月 08, 2016
星期二, 五月 31, 2016
python中的数据工具箱
最近参加了第九届北京R语言大会,做了一个关于python的简单介绍。相关ppt在如下连接,需要的下载。
链接: http://pan.baidu.com/s/1dEGl63f 密码: k3y6
博客,只要有时间,我还是会继续坚持的。
链接: http://pan.baidu.com/s/1dEGl63f 密码: k3y6
博客,只要有时间,我还是会继续坚持的。
订阅:
博文 (Atom)