В настоящее время я программирую функцию потерь и изо всех сил пытаюсь вычислить вторые производные модели.
def loss(model, t_interior, S_interior, t_terminal, S_terminal):
Args:
model: DGM model object
t_interior: sampled time points in the interior of the function's domain
S_interior: sampled space points in the interior of the function's domain
t_terminal: sampled time points at terminal point (vector of terminal times)
S_terminal: sampled space points at terminal time
# Loss term #1: PDE
# compute function value and derivatives at current sampled points
V = model(t_interior, S_interior)
V_t = tf.gradients(V, t_interior)[0]
V_S = tf.gradients(V, S_interior)[0]
sumterm = 0
for i in range(space_dim):
for j in range(space_dim):
temp1 = tf.transpose(tf.gather_nd(tf.transpose(S_interior), [[i]]))
temp2 = tf.gather_nd(tf.transpose(S_interior), [[i]])
temp3 = tf.gather_nd(tf.transpose(V_S), [[i]]) # ith column of V_S, but as row vector
V_SS = tf.gradients(tf.transpose(temp3), tf.transpose(temp2))[0] # Computes second derivative of V with respect to x_i and x_j
print('temp3: ', temp3)
print('V_SS: ', V_SS)
sumterm += tf.multiply(rho, tf.multiply(tf.matmul(sig(temp1),sig(temp2)), V_SS))
diff_V = V_t + tf.matmul(mu(S_interior), V_S) + 0.5* sumterm - r*V
Итак, то, что я пытался сделать с V_SS, - это вычислить все вторые производные от V с помощью относительно S_interior, но теперь он просто безразмерен и не работает в целом. S_interior должен иметь размер (1000, 4), но на самом деле он имеет размер (?, 4) из-за того, что происходит позже в коде. В качестве фона это код, взятый из alialaradi / DeepGalerkinMethod, и я пытаюсь увеличить пространственное измерение до 4 вместо 1. Заранее благодарим за любую помощь и дайте мне знать, если что-то неясно.