【问题标题】:TensorFlow: integrate output of neural networkTensorFlow:整合神经网络的输出
【发布时间】:2019-07-14 06:27:10
【问题描述】:

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

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,它应该是固定的。

【问题讨论】:

    标签: python tensorflow neural-network numerical-methods


    【解决方案1】:

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

    为此,您可以使用trapezoidal rule,您可以在tensorflows AUC function 中找到可能的实现。在你的情况下,它可能看起来像:

    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 将是模型的输出。

    【讨论】:

    • 吹毛求疵:就运行时间而言,在reduce_sum 之外进行除以 2 可能会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2020-03-15
    • 2019-10-01
    • 2017-11-21
    • 2012-01-16
    相关资源
    最近更新 更多