Я новичок в tenorflow и играю с существующим кодом, подходящим для моего приложения. Чтобы упростить обсуждение, пусть u (x, t) будет моей нейронной сетью, которая зависит от x, t, которые являются скалярами. u скалярная функция.
Для моей функции потерь мне нужно вычислить интегралы от u (x, t) по x за фиксированное время t. Я планирую оценить этот интеграл, используя сумму Римана, скажем, через правило трапеции. Для каждого t я указал значения x, при которых я хочу оценить u (x, t) для аппроксимации интеграла.
Ниже приведен упрощенный фрагмент моего кода:
self.x_tf = tf.placeholder(tf.float32, shape=[None, 1])
self.t_tf = tf.placeholder(tf.float32, shape=[None, 1])
self.x_int_tf = tf.placeholder(tf.float32, shape=[None, 1])
self.f_pred = self.f(self.x_f_tf, self.t_f_tf, self.x_int_tf)
def f(self, x, t, x_int):
# for each value of t, evaluate integral term at x_int
intVals = tf.zeros([0,1])
for id in range(int(t.shape[0])):
sliceTime = tf.ones([int(x_int.shape[0]), 1])*t[id]
# compute neural network solution
# This calls my neural network
uSlice = self.NN(x_int, sliceTime)
# compute integral
integ = self.integral_trapz(uSlice , x_int)
intVals = tf.concat([intVals,integ],axis = 0)
# more code involving x, and intVals, etc.
return f_pred
def integral_trapz(self, y, x):
dx = (x[-1] - x[0]) / (int(x.shape[0]) - 1)
return ((y[0] + y[-1])/2 + tf.reduce_sum(y[1:-1])) * dx
Функция потерь является функцией f_pred.
Однако мой код выдает ошибку в int (t.shape [0]), потому что заполнитель t имеет форму вдоль оси = 0, равную None.
Я искал обмен стека, но, похоже, нет единого мнения о том, как с этим справиться.
Кто-нибудь может мне помочь с этим вопросом? Или есть лучшая альтернатива?
Помощь с благодарностью.