【问题标题】:can python differentiate neural network with multi-outputs?python可以区分具有多输出的神经网络吗?
【发布时间】:2022-08-04 02:50:55
【问题描述】:

因为我们知道自动微分是通过 python 中的tf.GradientTape 实现的,例如:

with tf.GradientTape(persistent=True) as tape1:
    func_1 = u(x, y)
d_fun1_dx, d_fun1_dy = tape1.gradient(func_1, [x, y])
del tape1

它可以得到单个输出神经网络的导数。

我有一个有两个输入的神经网络x, y和两个输出f1, f2.我想获得 df1/dx、df1/dy、df2/dx、df2/dy,我该如何实现?

  • 你需要使用纯张量流吗?否则,我建议你使用 Keras(它使用 tensorflow 作为后端)。它自动处理多个输入和输出的梯度流。

标签: tensorflow neural-network gradient


【解决方案1】:

您正在寻找的是一个雅可比式不是渐变。它在tape1.jacobian 下的tf 中实现,并将返回一个偏导数的雅可比矩阵。

话虽这么说,雅可比矩阵的使用通常需要更高级的方法,如果你真的需要雅可比矩阵,你打算用它做什么真的会指导你。例如,如果您要简单地使用“梯度下降”,您现在需要决定如何处理每个参数的 2 个梯度。你要分析它们吗?你只是要添加它们吗?如果您要添加它们,请注意

(dy/dx) f(x) + (dz/dx) f(x) = (d/dx) [ f.z(x) + f.y(x) ]

所以它相当于只是添加输出和计算正常梯度。雅可比矩阵当然也有使用,但它们远远超出了典型的梯度下降算法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 2018-02-28
    • 2012-01-16
    • 2017-11-16
    • 2016-08-03
    • 2021-09-22
    • 1970-01-01
    相关资源
    最近更新 更多