Цикл по заполнителю с переменной формой в тензорном потоке - PullRequest
0 голосов
/ 20 мая 2019

Я новичок в 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.

Я искал обмен стека, но, похоже, нет единого мнения о том, как с этим справиться.

Кто-нибудь может мне помочь с этим вопросом? Или есть лучшая альтернатива?

Помощь с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...