Python 如何在计算theano变量时打印该变量的值?
我正在使用千层面和theano来构建一个卷积神经网络,我在尝试遵循中的打印调试示例时遇到了问题 我的函数是这样的,G和Y是无张量Python 如何在计算theano变量时打印该变量的值?,python,theano,Python,Theano,我正在使用千层面和theano来构建一个卷积神经网络,我在尝试遵循中的打印调试示例时遇到了问题 我的函数是这样的,G和Y是无张量 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
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_损失应该是一个符号表达式,当使用输入数据编译和执行时,将导致计算一批训练图像的平均损失
我想做的是在这里放一个符号打印表达式,这样每当计算ave_损失时,它就会打印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使其起作用
我试图做的是创建一个identity函数,它接受G并返回G,而不修改它,但同时打印pre_func和post_func
如何使用No.function(或No.printing.Print)来完成此操作?很遗憾,我无法帮助您实现打印方法,因为 我自己从来没有用过这张照片。但是不是吗 可以将G与ave_损失一起返回。 然后你可以看看里面的内容 比如:
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的内容似乎没有变化。
你为什么要打印它呢。因为打印也可以防止
如果我没记错的话,我不会从一些优化中得到答案。这只是一个虚构的例子。我试图确保这些值在特定范围内。我不会永久启用这些功能。我想使用单独的函数是一个不错的解决方法。