簡體   English   中英

Tensorflow中的二階導數和

[英]Sum of second order derivatives in Tensorflow

我在Tensorflow中有一個函數,讓我們調用f ,它以[None, N, M]形式的張量x作為輸入,並為每行輸出一個數字,即輸出是某些形式為[None]的張量。任意數量的行。

我想計算f拉普拉斯算子 ,這對我來說意味着要計算形狀為[None]的張量y ,其中行由

\\ SQRT {FOO}

我可以按照自己的方式獲得一階漸變。 為了這個例子,我的代碼是這樣的:

import tensorflow as tf
x = tf.Variable([[[0.5, 1, 2], [3, 4, 5]]] , dtype=tf.float64)
y = tf.reduce_sum(x*x*x/3, axis=[1, 2])
grad = tf.gradients(y, x)[0]

如預期的那樣

grad: [[[ 0.25  1.    4.  ]
        [ 9.   16.   25.  ]]]

我以為我現在可以在grad做同樣的事情來獲得第二個訂單:

lap = tf.gradients(grad, x)

但這給

lap: [-117.125]

這與我所期望的完全不同。 我本來想要

lap: [[[ 1  2  4]
       [ 6  8 10]]]

或只是每一行的總和,如下所示:

lap: [ 31 ]

顯然,這並不能滿足我的要求,而我對如何解決它有些困惑。 有什么幫助嗎?

我也嘗試過tf.hessians ,它可以起作用:

hess = tf.hessians(y, x)

這使

hess:
 [array([[[[[[ 1.,  0.,  0.],
             [ 0.,  0.,  0.]]],
           [[[ 0.,  2.,  0.],
             [ 0.,  0.,  0.]]],
           [[[ 0.,  0.,  4.],
             [ 0.,  0.,  0.]]]],

           [[[[ 0.,  0.,  0.],
              [ 6.,  0.,  0.]]],
            [[[ 0.,  0.,  0.],
              [ 0.,  8.,  0.]]],
            [[[ 0.,  0.,  0.],
              [ 0.,  0., 10.]]]]]])]

它里面有正確的數字,但是它計算出的導數比我需要的要多得多,從混亂中挑選出數字似乎效率很低。

第二個問題 :我認為問題與tf.gradients(ys, xs)返回 tf.gradients(ys, xs) 中ys wrt x之和的導數”有關。 我不想要求和的導數,因此我想我可能需要在grad tf.gradients上運行tf.gradients數次。 但是,為什么用上面的代碼得到完整的一階梯度呢? 據我所知,沒有求和,因為我得到了所有想要的導數。

旁注 :如果x的形狀為[None, N*M]會有所幫助,那么我可以重構其余代碼以使用此格式。

這很有趣,因為以下內容非常適合我。

輸入代碼:

import tensorflow as tf
x = tf.Variable([[[0.5, 1, 2], [3, 4, 5]]] , dtype=tf.float64)
y = tf.reduce_sum(x*x*x/3, axis=[1, 2])
grad = tf.gradients(y, x)[0]
grad2 = tf.gradients(grad, x)
init_op = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init_op)
    g1, g2 = sess.run([grad, grad2])

print('First order : {}'.format(g1))
print('Second order : {}'.format(g2))

輸出:

First order : [[[ 0.25  1.    4.  ]
  [ 9.   16.   25.  ]]]
Second order : [array([[[ 1.,  2.,  4.],
        [ 6.,  8., 10.]]])]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM