TensorFlow: интегрировать вывод нейронной сети - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть нейронная сеть, которая принимает в качестве входных данных два параметра:

t = tf.placeholder(tf.float32, [None, 1])
x = tf.placeholder(tf.float32, [None, 1])

в моей функции потерь. Мне нужно интегрировать вывод через t, но я не могу понять, как это сделать.это потому, что единственная функция числового интегрирования, доступная в TensorFlow, tf.contrib.integrate.odeint_fixed, не может принимать Tensor в качестве функции, поскольку ее нельзя вызвать:

Call

t = tf.constant(np.linspace(0.0,1.0,100), dtype = tf.float64 )

integ = tf.contrib.integrate.odeint_fixed(model.output, 
                                          0.0, 
                                          t, 
                                          method = "rk4")

Output

...

<ipython-input-5-c79e79b75391> in loss(model, t, x)
     24                                                 0.0,
     25                                                 t,
---> 26                                                 method = "rk4")

...

TypeError: 'Tensor' object is not callable

Не говоря уже о том, что я также не знаю, как относиться к x в этом вычислении, он должен быть зафиксирован.

1 Ответ

0 голосов
/ 20 февраля 2019

tf.contrib.integrate.odeint_fixed представляется для интегрирования обыкновенных дифференциальных уравнений (ОДУ).Если я вас правильно понимаю, однако, вы хотите приблизить определенный интеграл выходных данных вашей модели, назовем его y, сэмплированным на t.

. Для этого вы можете использовать трапециевидное правило , для которого вы найдете возможную реализацию в функции AUC тензорного потока .В вашем случае это может выглядеть так:

from tensorflow.python.ops import math_ops

def trapezoidal_integral_approx(t, y):
    return math_ops.reduce_sum(
            math_ops.multiply(t[:-1] - t[1:],
                              (y[:-1] + y[1:]) / 2.), 
            name='trapezoidal_integral_approx')

, где y будет выводом вашей модели.

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