簡體   English   中英

每當評估theano變量時,如何打印它的值?

[英]How do I print the value of a theano variable whenever it is evaluated?

我正在使用千層面和theano構建卷積神經網絡,但在嘗試遵循http://deeplearning.net/software/theano/tutorial/debug_faq.html#how-do-i中的printdebugging示例時遇到了問題-工序,貫穿一個編譯功能

我的函數看起來像這樣,其中G和Y是theano張量

def loss_function(self, G, Y_):
    # Split batch into pairs
    G1, G2 = G[0::2], G[1::2]
    Y = Y_[:G.shape[0] // 2]
    # Energy of training pairs
    E = T.abs_((G1 - G2)).sum(axis=1)
    Q = 2
    genuine_loss = (1 - Y) * (2 / Q) * (E ** 2)
    imposter_loss = (Y) * 2 * Q * T.exp((-2.77 * E) / Q)
    loss = genuine_loss + imposter_loss
    avg_loss = T.mean(loss)
    return ave_loss

因此,輸出ave_loss應該是一個符號表達式,當使用輸入數據進行編譯和執行時,將導致計算一批訓練圖像上的平均損耗。

我想做的是在這里放置一個符號打印表達式,以便每當計算ave_loss時,它都會打印G的內容。

但是現在我只能嘗試在打印之前和之后進行打印

def loss_function(self, G, Y_):

    # Inject a symbolic expression to print something before and after G is used. 

    def pre_func(i, node, fn):
        print('Before')

    def post_func(i, node, fn):
        print('After')

    dbgfunc = theano.function([G], [G],
                              mode=theano.compile.MonitorMode(
                                  pre_func=pre_func,
                                  post_func=post_func))
    G = dbgfunc()

    # Split batch into pairs
    G1, G2 = G[0::2], G[1::2]
    Y = Y_[:G.shape[0] // 2]
    # Energy of training pairs
    E = T.abs_((G1 - G2)).sum(axis=1)
    Q = 2
    genuine_loss = (1 - Y) * (2 / Q) * (E ** 2)
    imposter_loss = (Y) * 2 * Q * T.exp((-2.77 * E) / Q)
    loss = genuine_loss + imposter_loss
    avg_loss = T.mean(loss)
    return ave_loss

上面的代碼不起作用,我不確定如何操縱theano.function使其起作用。

我正在嘗試做的是創建一個標識函數,該函數接受G並返回G而不修改它,但在此過程中打印pre_func和post_func。

如何使用theano.function(或theano.printing.Print)完成此任務?

不幸的是,由於我從未使用過打印件,因此我無法為您提供打印方法。 但是..不可能將G與ave_loss一起返回。 然后,您可以查看內容...

就像是:

def loss_function(self, G, Y_):
    ...
    G = dbgfunc()
    ...
    return ave_loss, G


G = T.matrix('G') 
Y_ = T.matrix('Y')

ave_loss, G_prime = loss_function(G, Y_)

f = function([G, _Y], [ave_loss, G_prime])

print( f(...) )

編輯:

我只是看到G的內容似乎沒有變化。 您為什么仍要打印它。 如果我沒有記錯的話,由於打印還可以防止Theano進行某些優化。

暫無
暫無

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

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