专栏名称: AI科技评论
「AI科技评论」是国内顶尖人工智能媒体和产业服务平台,专注全球 AI 业界、学术和开发三大方向的深度报道。
目录
相关文章推荐
51好读  ›  专栏  ›  AI科技评论

干货 | 如何用TensorFlow生成令人惊艳的分形图案

AI科技评论  · 公众号  · AI  · 2017-09-11 15:01

正文

请到「今天看啥」查看全文


tf.global_variables_initializer().run()
zs_ = tf.where(tf.abs(zs) < R, zs**2 + xs, zs)
not_diverged = tf.abs(zs_) < R
step = tf.group(
zs.assign(zs_),
ns.assign_add(tf.cast(not_diverged, tf.float32))
for i in range(ITER_NUM): step.run()
final_step = ns.eval()
final_z = zs_.eval()

zs就对应我们之前迭代公式的z,而xs就对应迭代公式中的c。为了方便起见,只要计算时数值的绝对值大于一个事先指定的值R,就认为其发散。每次计算使用tf.where只对还未发散的值进行计算。结合ns和zs_就可以计算颜色,得到经典的Mandelbrot图像。


Julia集合

Julia集合和Mandelbrot集合差不多,但这次我们固定c,转而计算发散的z的值。 即c是固定的常数(可以任取),数列变成 z,z^2+c,(z^2+c)^2+c......。如果该数列发散,对应的z就属于Julia集合。对此,我们只要在原来的程序中修改两行内容,就可以生成Julia集合:

xs = tf.constant(np.full(shape=Z.shape, fill_value=c, dtype=Z.dtype))

zs = tf.Variable(Z)

我们在fill_value=c处指定了Julia集合中的c值,只要使用不同的c值,就可以生成完全不同的Julia集合!

默认: c=-0.835-0.2321i:

将c值变为 c=-0. 8i ,并调整颜色 (调整方法参考Github页面的说明):

选用 c=0285+0.01i,图案又变得完全不同:







请到「今天看啥」查看全文