成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何用TensorFlow生成令人驚艷的分形圖案

大數(shù)據(jù) 數(shù)據(jù)可視化
今天來介紹一個(gè)小項(xiàng)目:在TensorFlow中生成分形圖案。分形本身只是一個(gè)數(shù)學(xué)概念,與機(jī)器學(xué)習(xí)并無太大關(guān)系,但是通過分形的生成,我們可以了解怎么在TensorFlow中進(jìn)行數(shù)學(xué)計(jì)算,以及如何進(jìn)行基本的流程控制,是學(xué)習(xí)TensorFlow的一個(gè)非常好的練手項(xiàng)目。

[[198344]]

今天來介紹一個(gè)小項(xiàng)目:在TensorFlow中生成分形圖案。分形本身只是一個(gè)數(shù)學(xué)概念,與機(jī)器學(xué)習(xí)并無太大關(guān)系,但是通過分形的生成,我們可以了解怎么在TensorFlow中進(jìn)行數(shù)學(xué)計(jì)算,以及如何進(jìn)行基本的流程控制,是學(xué)習(xí)TensorFlow的一個(gè)非常好的練手項(xiàng)目。

在開始之前,需要說明的是,TensorFlow官方也提供了一個(gè)生成分形圖案的教程(地址: www.tensorflow.org/tutorials/mandelbrot),然而官方教程中生成的圖像實(shí)在是太丑了,而且只能生成一種圖案,我對官方的代碼做了一些改進(jìn),并且加入了多種類型的分形,此外,不僅可以生成圖像,還可以制作gif動(dòng)畫,代碼已經(jīng)放到了Github上:hzy46/tensorflow-fractal-playground,主要的程序只有50行,歡迎大家參考。

Mandelbrot集合

Mandelbrot集合是分形中最經(jīng)典的一個(gè)例子。考慮迭代公式z_{n+1}=z_{n}^2 + c(z和c都是復(fù)數(shù))。當(dāng)z_0為0時(shí),得到的值可以組成一個(gè)數(shù)列,依次為c, c^2+c,(c^2+c)^2+c……。當(dāng)該數(shù)列發(fā)散到無窮時(shí),對應(yīng)的點(diǎn)就屬于Mandelbrot集合。

如c=0 時(shí),顯然數(shù)列永遠(yuǎn)是0,并不發(fā)散,因此0不屬于Mandelbrot集合。

又如c=3i 時(shí),對應(yīng)的數(shù)列為3i, -9+3i, 63-51i, 1431-6477j…. ,數(shù)字越來越龐大,因此3i就屬于Mandelbrot集合。

在二維平面上,將所有不屬于Mandelbrot集合的點(diǎn)標(biāo)記為黑色,將所有屬于Mandelbrot集合的點(diǎn)按照其發(fā)散速度賦予不同的顏色,就可以得到Mandelbrot的經(jīng)典圖像:

[[198345]] 

上面這張圖完全是使用TensorFlow進(jìn)行計(jì)算的,類似的圖大家應(yīng)該在網(wǎng)上也見過好多了,在TensorFlow中,我們定義下面的計(jì)算步驟:

  1. xs = tf.constant(Z.astype(np.complex64)) 
  2. zs = tf.Variable(xs) 
  3. ns = tf.Variable(tf.zeros_like(xs, tf.float32)) with tf.Session(): 
  4.     tf.global_variables_initializer().run() 
  5.     zs_ = tf.where(tf.abs(zs) < R, zs**2 + xs, zs) 
  6.     not_diverged = tf.abs(zs_) < R 
  7.     step = tf.group
  8.         zs.assign(zs_), 
  9.         ns.assign_add(tf.cast(not_diverged, tf.float32))  
  10.     for i in range(ITER_NUM): step.run() 
  11.     final_step = ns.eval() 
  12.     final_z = zs_.eval()  

zs就對應(yīng)我們之前迭代公式的z,而xs就對應(yīng)迭代公式中的c。為了方便起見,只要計(jì)算時(shí)數(shù)值的絕對值大于一個(gè)事先指定的值R,就認(rèn)為其發(fā)散。每次計(jì)算使用tf.where只對還未發(fā)散的值進(jìn)行計(jì)算。結(jié)合ns和zs_就可以計(jì)算顏色,得到經(jīng)典的Mandelbrot圖像。

Julia集合

Julia集合和Mandelbrot集合差不多,但這次我們固定c,轉(zhuǎn)而計(jì)算發(fā)散的z的值。即c是固定的常數(shù)(可以任取),數(shù)列變成z,z^2+c,(z^2+c)^2 +c,…..。如果該數(shù)列發(fā)散,對應(yīng)的z就屬于Julia集合。對此,我們只要在原來的程序中修改兩行內(nèi)容,就可以生成Julia集合:

  1. xs = tf.constant(np.full(shape=Z.shape, fill_value=c, dtype=Z.dtype)) 
  2. zs = tf.Variable(Z)  

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

默認(rèn):c = -0.835 – 0.2321i :

[[198346]] 

將c值變?yōu)閏 = -0.8 * 1j ,并調(diào)整顏色(調(diào)整方法參考Github頁面的說明):

[[198347]] 

選用c=0.285 + 0.01i ,圖案又變得完全不同:

[[198348]] 

生成Julia集合的動(dòng)畫

在Julia集合中,每次都對c的值進(jìn)行微小的改變,并將依次生成圖片制作為gif,就可以生成如下所示的動(dòng)畫,對應(yīng)的代碼為julia_gif.py: 

[[198349]] 

這里由于上傳gif有大小限制的關(guān)系,只展示了一個(gè)小尺寸的動(dòng)畫圖像。程序中提供了一個(gè)width參數(shù),可以修改它以生成更大尺寸,質(zhì)量更高的動(dòng)畫圖像。

探索Mandelbrot集合

(注意:下面的圖片可能對密集恐懼癥患者不太友好。。。因此慎重翻頁。。)

在前面生成的Mandelbrot集合中,我們可以將圖像放大,選取某些區(qū)域進(jìn)行生成,就可以得到格式各樣造型迥異的分形圖案,對應(yīng)的程序?yàn)閙andelbrot_area.py。

在Mandelbrot集合中,有很多地方圖案比較奇特,如下圖中的9個(gè)位置。

 

其中編號(hào)為2的地方被稱為“Elephant Valley”,因?yàn)榇颂幍膱D案與大象很像,直接運(yùn)行mandelbrot_area.py就可以得到該區(qū)域的圖像:

[[198351]] 

編號(hào)為3的地方被稱為“Triple Spiral Valley”(三重螺旋),在mandelbrot_area.py修改一下坐標(biāo)位置為(ratio調(diào)整的是顏色):

  1. start_x = -0.090  # x range 
  2. end_x = -0.086 
  3. start_y = 0.654  # y range 
  4. end_y = 0.657 
  5. width = 1000 
  6. ratio1, ratio2, ratio3 = 0.2, 0.6, 0.6  

就可以得到該處的圖案:

[[198352]] 

***編號(hào)為1的地方被稱為“Seahorse Valley”(海馬山谷),對應(yīng)的坐標(biāo)為:

  1. start_x = -0.750  # x range 
  2. end_x = -0.747 
  3. start_y = 0.099  # y range 
  4. end_y = 0.102 
  5. width = 1000 
  6. ratio1, ratio2, ratio3 = 0.1, 0.1, 0.3 

圖像如下,確實(shí)和海馬有一點(diǎn)神似:

[[198353]] 

生成更多的圖案

項(xiàng)目提供了兩個(gè)jupyter notebook:Mandelbrot.ipynb和Julia.ipynb可以對Mandelbrot集合、Julia集合做更方便的探索。其中,Mandelbrot集的更多坐標(biāo)位置可以參考Quick Guide to the Mandelbrot Set,Julia集中更多有趣的c值可以參考Julia set – Wikipedia。網(wǎng)上類似的資源還有很多。

***再安利一下項(xiàng)目地址:hzy46/tensorflow-fractal-playground。如果代碼有什么問題可以直接發(fā)在評論里或者在Github上提出issue:) 

責(zé)任編輯:龐桂玉 來源: 36大數(shù)據(jù)
相關(guān)推薦

2022-03-10 12:39:48

NitruxLinuxLinux發(fā)行版

2024-02-20 08:46:54

2017-04-17 08:35:12

Python數(shù)學(xué)算法

2018-03-23 10:00:34

PythonTensorFlow神經(jīng)網(wǎng)絡(luò)

2024-02-04 18:20:53

AI模型代碼

2024-12-19 11:30:00

C++17CTAD代碼

2009-08-24 15:58:00

Visual C#生成

2024-11-25 05:00:00

randomPython

2017-11-27 17:29:43

深度學(xué)習(xí)TensorFlow安卓設(shè)備

2015-07-08 09:43:22

程序員

2015-09-24 09:56:19

.NET二維碼

2011-03-10 09:32:47

Java測試

2017-05-09 15:39:33

ensorFlow機(jī)器人機(jī)器學(xué)習(xí)

2021-07-01 09:10:31

自動(dòng)駕駛無人駕駛人工智能

2022-11-17 12:09:51

2018-09-12 16:30:45

Python編程語言馬賽克畫

2025-03-20 14:30:02

2025-03-31 09:30:52

2024-02-26 16:55:51

Sora人工智能

2021-11-29 07:02:24

Python函數(shù)操作
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久久久久久久久久丰满 | 亚洲欧美一区二区在线观看 | 欧美亚洲视频 | 日韩精品一区二区三区免费视频 | 欧美久久久久久 | 欧美11一13sex性hd | 91精品国产一区二区三区 | 精品一二区 | 日韩a在线观看 | 中文字幕成人在线 | 久久久欧洲 | wwww.xxxx免费| 欧美一级三级在线观看 | 波多野结衣一区二区三区在线观看 | 一区二区中文 | 三级国产三级在线 | 日本不卡一区 | 亚洲国产一区二区三区 | 亚洲视频免费一区 | 亚洲国产精品一区二区久久 | 国产二区三区 | 中文字幕av在线一二三区 | 99久久婷婷| 久久这里只有 | 国产精品成人久久久久 | 国产在线看片 | 一二三四在线视频观看社区 | 亚洲欧美精品久久 | av一区二区三区四区 | 自拍第1页| 国产精品久久久精品 | 欧洲一区视频 | 欧美日韩国产一区二区 | 中文字幕视频在线 | 国产ts人妖系列高潮 | 国产一区三区在线 | av 一区二区三区 | 欧美专区在线观看 | 毛片一级黄色 | 久久免费精品 | 久久久久久国产精品三区 |