Как рассчитать лапласиан нейронной сети с помощью тензорного потока? - PullRequest
0 голосов
/ 03 мая 2020

Я аппроксимирую PDE, используя нейронную сеть с 4 слоями. Каждый слой использует линейное умножение - M * x + b - и активацию tanh.

Моя входная переменная - 2D и выход нейронной сети. это искомая функция (1D). часть моей функции стоимости (которую мне нужно минимизировать) использует лапласианское значение аппроксимированной функции. Я думаю, что мне удалось сделать это , но ошибка сети не сходится должным образом. Я пытался использовать метод гессианов в тензорном потоке, но не смог понять, как получить Uxx и Uyy, когда U - приближенная функция

, это моя попытка найти его -

def MyHess(U, X):
 gradu = tf.gradients(U, X)
 print(gradu)
 u_x = gradu[0][:, 0]
 u_x = tf.squeeze(u_x)
 u_x = tf.reshape(u_x, [-1, 1])

 grad_ux = tf.gradients(u_x, X)
 u_xx = grad_ux[0][:, 0]
 u_xx = tf.squeeze(u_xx)
 u_xx = tf.reshape(u_xx, [-1, 1]) 

 u_y = gradu[0][:, 1]
 u_y = tf.squeeze(u_y)
 u_y = tf.reshape(u_y, [-1, 1])

 grad_uy = tf.gradients(u_y, X)
 u_yy = grad_uy[0][:, 1]
 u_yy = tf.squeeze(u_yy)
 u_yy = tf.reshape(u_yy, [-1, 1])
 return u_xx + u_yy

затем я активировал его:

NN = Neural_Network4Layers_PDE(input = 2, 26,26 26,10, 1 #This is the output )

T = NN.forward(t1)
laplacian = MyHess(T, t1)

Это правильный путь? Есть ли другой способ (лучший) для вычисления лапласиана из 2 переменных?

Спасибо.

...