Python 如何在计算theano变量时打印该变量的值?

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

我正在使用千层面和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=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的内容似乎没有变化。 你为什么要打印它呢。因为打印也可以防止
如果我没记错的话,我不会从一些优化中得到答案。

这只是一个虚构的例子。我试图确保这些值在特定范围内。我不会永久启用这些功能。我想使用单独的函数是一个不错的解决方法。