TensorFlow - Hình thành đồ thị

Phương trình vi phân riêng (PDE) là một phương trình vi phân, bao gồm các đạo hàm riêng với hàm chưa biết của một số biến độc lập. Với tham chiếu đến các phương trình đạo hàm riêng, chúng tôi sẽ tập trung vào việc tạo các đồ thị mới.

Giả sử có một cái ao với kích thước 500 * 500 vuông -

N = 500

Bây giờ, chúng ta sẽ tính toán phương trình vi phân riêng và tạo thành đồ thị tương ứng bằng cách sử dụng nó. Hãy xem xét các bước được đưa ra dưới đây cho đồ thị tính toán.

Step 1 - Nhập thư viện để mô phỏng.

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

Step 2 - Bao gồm các hàm để biến đổi mảng 2D thành một nhân tích chập và phép toán tích chập 2D đơn giản.

def make_kernel(a):
   a = np.asarray(a)
   a = a.reshape(list(a.shape) + [1,1])
   return tf.constant(a, dtype=1)

def simple_conv(x, k):
   """A simplified 2D convolution operation"""
   x = tf.expand_dims(tf.expand_dims(x, 0), -1)
   y = tf.nn.depthwise_conv2d(x, k, [1, 1, 1, 1], padding = 'SAME')
   return y[0, :, :, 0]

def laplace(x):
   """Compute the 2D laplacian of an array"""
   laplace_k = make_kernel([[0.5, 1.0, 0.5], [1.0, -6., 1.0], [0.5, 1.0, 0.5]])
   return simple_conv(x, laplace_k)
   
sess = tf.InteractiveSession()

Step 3 - Bao gồm số lần lặp và tính toán biểu đồ để hiển thị các bản ghi cho phù hợp.

N = 500

# Initial Conditions -- some rain drops hit a pond

# Set everything to zero
u_init = np.zeros([N, N], dtype = np.float32)
ut_init = np.zeros([N, N], dtype = np.float32)

# Some rain drops hit a pond at random points
for n in range(100):
   a,b = np.random.randint(0, N, 2)
   u_init[a,b] = np.random.uniform()

plt.imshow(u_init)
plt.show()

# Parameters:
# eps -- time resolution
# damping -- wave damping
eps = tf.placeholder(tf.float32, shape = ())
damping = tf.placeholder(tf.float32, shape = ())

# Create variables for simulation state
U = tf.Variable(u_init)
Ut = tf.Variable(ut_init)

# Discretized PDE update rules
U_ = U + eps * Ut
Ut_ = Ut + eps * (laplace(U) - damping * Ut)

# Operation to update the state
step = tf.group(U.assign(U_), Ut.assign(Ut_))

# Initialize state to initial conditions
tf.initialize_all_variables().run()

# Run 1000 steps of PDE
for i in range(1000):
   # Step simulation
   step.run({eps: 0.03, damping: 0.04})
   
   # Visualize every 50 steps
   if i % 500 == 0:
      plt.imshow(U.eval())
      plt.show()

Các đồ thị được vẽ như hình dưới đây -