gpt4 book ai didi

python - 每当评估 theano 变量时,如何打印它的值?

转载 作者:太空宇宙 更新时间:2023-11-03 17:44:00 25 4
gpt4 key购买 nike

我正在使用烤宽面条和 theano 构建卷积神经网络,但在尝试遵循 http://deeplearning.net/software/theano/tutorial/debug_faq.html#how-do-i-step-through-a-compiled-function 中的打印调试示例时遇到问题

我的函数看起来像这样,其中 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 来自一些优化。

关于python - 每当评估 theano 变量时,如何打印它的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30085991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com