我是tensorflow的新手,我正在研究适合我的应用程序的现有代码。为了简化讨论,让u(x,t)是我的神经网络,该神经网络依赖于标量的x,t。 u是标量函数。
对于我的损失函数,我需要在固定时间t上计算x上u(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沿axis = 0的形状等于无。
我一直在研究堆栈交换,但是似乎对如何处理它没有共识。
有没有人可以帮助我解决这个问题?还是有更好的选择?
非常感谢您的帮助。