2015-08-26 160 views
2

我想使用verify_grad函數,但我得到的形式錯誤「'TensorVariable'對象不可調用」。verify_grad函數:'TensorVariable'對象不可調用

theano.gradient.verify_grad(fun, pt, n_tests=2, rng=None, eps=None, out_type=None, abs_tol=None, rel_tol=None, mode=None, cast_to_output_type=False) 

在它說,好玩的是文檔「一個Python函數,它Theano變量作爲輸入,並返回一個Theano變量。例如,結合單輸出的運算實例」。

我已經瀏覽了文檔中的圖形結構部分,我想我理解了一個操作節點是什麼,但顯然我不知道。

E.g.如果我有兩個TensorVariables x和y並且我想要它們的乘積,那麼*是op節點,對不對?但是如果我聲明z = x * y,那麼z又是一個TensorVariable,對吧?

那麼有什麼辦法可以定義一個op的例如一個負對數似然函數爲了評估該函數的梯度的正確性?或者有沒有其他方法可以在你構建的函數中獲得數字漸變?

回答

1

下面是verify_grad在使用中的示例:

import numpy 
import theano 

def something_complicated(x, y): 
    z = x * y 
    return z 

x_value = numpy.array([[1., 2., 3.], [4., 5., 6.]], dtype=theano.config.floatX) 
y_value = numpy.array([[7., 8., 9.], [10., 11., 12.]], dtype=theano.config.floatX) 
theano.gradient.verify_grad(something_complicated, (x_value, y_value), rng=numpy.random) 

根據需要,something_complicated是「一個Python函數,它Theano變量作爲輸入[在這種情況下xy],並返回一個Theano變量[z在這種情況下]。」

您可以在something_complicated內部構造任何符號表達式,例如負對數似然計算。

一個Theano的操作可以是任何東西,只要

  1. 當它被稱爲調用(如果他們實行特殊__call__ function對象調用),它把所有的輸入爲Theano變量
  2. 當它被調用時,它只返回Theano變量。

something_complicated明顯符合這些要求。它可以通過Python函數進行調用,它假定xy是Theano變量,其返回值z也是Theano變量。

+0

非常感謝,這非常有幫助。他們應該把這個例子放在文檔中。 – eager2learn