如何在TensorFlow Eager Execution API中按向量获取向量的雅可比矩阵形式导数?

时间:2018-06-22 04:45:33

标签: tensorflow autodiff

在MLP模型中,可以通过以下公式计算l层的输入: z = Wa + b W是l-1层和l层之间的权重矩阵,a是l-1层神经元的输出信号,b是l层的偏置。 例如:

enter image description here

我想使用TensorFlow Eager Execution API来获取衍生产品:

enter image description here

enter image description here

enter image description here

我定义了一个函数来计算z的值:

def f002(W, a, b):
    return tf.matmul(W, a) + b

我的主程序:

def test001(args={}):
    tf.enable_eager_execution()
    tfe = tf.contrib.eager

    a = tf.reshape(tf.constant([1.0, 2.0, 3.0]), [3, 1])
    W = tf.constant([[4.0, 5.0, 6.0],[7.0, 8.0, 9.0]])
    b = tf.reshape(tf.constant([1001.0, 1002.0]), [2, 1])
    z = f002(W, a, b)
    print(z)
    grad_f1 = tfe.gradients_function(f002)
    dv = grad_f1(W, a, b)
    print(dv)

我可以在正向模式下获得z的正确值。但是,在打印派生结果时,它会显示以下内容:

[<tf.Tensor: id=17, shape=(2, 3), dtype=float32, numpy=
array([[1., 2., 3.],
       [1., 2., 3.]], dtype=float32)>, <tf.Tensor: id=18, shape=(3, 1), 
dtype=float32, numpy=
array([[11.],
       [13.],
       [15.]], dtype=float32)>, <tf.Tensor: id=16, shape=(2, 1), 
dtype=float32, numpy=
array([[1.],
       [1.]], dtype=float32)>]

这不是我想要的。如何通过向量获得向量的雅可比矩阵导数结果?

0 个答案:

没有答案