在张量流中循环遍历具有可变形状的占位符

时间:2019-05-19 22:49:25

标签: python loops tensorflow deep-learning

我是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的形状等于无。

我一直在研究堆栈交换,但是似乎对如何处理它没有共识。

有没有人可以帮助我解决这个问题?还是有更好的选择?

非常感谢您的帮助。

0 个答案:

没有答案