[英]How do I print the evaluated condition instead of its boolean value in python?
[英]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.