Я аппроксимирую 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 переменных?
Спасибо.