首页 > 解决方案 > TensorFlow:整合神经网络的输出

问题描述

我有一个神经网络,输入两个参数:

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

在我的损失函数中,我需要对输出进行积分t,但我无法找到这样做的方法,因为 TensorFlow 中唯一可用的数值积分函数tf.contrib.integrate.odeint_fixed不能将张量作为函数,因为它不能被调用:

称呼

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")

输出

...

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

...

TypeError: 'Tensor' object is not callable

更不用说我对如何处理x这个计算一无所知,它应该是固定的。

标签: pythontensorflowneural-networknumerical-methods

解决方案


tf.contrib.integrate.odeint_fixed似乎用于积分常微分方程(ODE)。但是,如果我理解正确,您想要近似模型输出的定积分,我们称之为 y,采样于t

为此,您可以使用梯形规则,您可以在tensorflows 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你的模型的输出在哪里。


推荐阅读