我们先来了解一下什么是CPPN。
Compositional Pattern Producing Networks(CPPN)
CPPN是一种通过设置一定的参数来生成视觉图案的神经网络。通过输入坐标值x, y,来输出RGB的像素色值。这个神经网络的函数如下所示:
这个网络因为它是连续可微分的,我们在网络上取任意两个位置接近的点,他们的输出也会非常的接近。这就导致了从中生成的图像一个属性:平滑。另外一个很酷的特性是,它具有“无限”的分辨率,因为坐标可以无限缩放。
CPPN的一个例子。使用一个简单的三层网络,以tanh作为激活函数。
参数
在我们了解这个网络最基础的功能之后,可以添加一些其他的输入,来生成更加复杂的图案。例如,我们可以添加半径 r 和可调参数 α。通过这些修改我们的网络 f 看起来像这样:
由于半径不仅提供了良好的非线性,而且还使网络能够将输出颜色与到原点的距离相关联,因为同一圆周上的点接收相同的值 r。
当半径R随x和y变化时,α参数在图像的过程中是静态的。本质上,你可以把这个参数看作z参数。当从3维(x y z)立方体采样时,我们看位置z=α上的切片。
你可以有创意地使用这些参数,稍后我们会探索更多的奇怪的配置。
9层的DenseNet长什么样?自己来看看吧!
通过改变 α 值制作的动画
初始化
神经网络的输出是由我们之前提到的输入和权重决定的。因此,权重对于网络的行为和输出图像的外观将起到至关重要的作用。
在示例图像中,我主要从高斯分布(N)中取权重W,这个高斯分布的均值为零,方差由输入神经元的数目,和一个调节参数 β决定,这样我们可以自主调节方差。
我们可以要求网络只输出一个单一的值,这可以理解为黑白图像。
现在是有趣的部分。这里是基于CPPNS原理的渐进图像发生器。你可以调整Z值,这里是上面公式中的方差(也可以等同于参数β),来选择是否需要黑白图像并探索种子空间。注意,用于高斯分布的随机数生成器将总是为同一种子产生相同的值,这是很酷的,因为您可以共享种子并生成相同的结果。
图1:生成自己的模式。
我编写了一个示例种子列表,当我玩这个工具时,我发现它非常引人注目。尝试从这些种子开始,然后探索自己的空间!:)
图2:种子实例。点击图像可以在生成器中处理它。
这些只是一些例子。尝试改变种子,时间或方差本身,或许你会创造一些杰作!
探索其他架构
在本节中,我想向你们展示一些我所得到的奇特架构的结果。
基于β=cos(10r)的参数化图像
正如你所看到的,这些图像的表现出人意料地非常不同。一个单一的参数在网络的激活中会产生巨大的差异。
使用f(x^2, y^2, α)的对称性
领取专属 10元无门槛券
私享最新 技术干货