如何在Theano函数内部打印值?
我最近从Matlab/C++转到Theano,写了一个函数
train_model = theano.function([x_in, y_index],
classifier.cost,
updates=updates,
givens={
x: x_in,
y: y_in[y_index]})
我想在每次迭代中打印出网络中两个层之间的值(这样可以帮助调试,更好地控制函数等等)。我尝试修改函数,设置分类器,让它打印出来(可以用print()或者theano.printing.Print/theano.pp()),但我只得到了一次打印,还是在模型设置的时候。
1 个回答
4
在你的例子中,classifier.cost
是一个表达式,可能是由几个其他表达式组成的,这些表达式都是基于相同的输入。你可以把这些中间的表达式变成函数,就像你对 classifier.cost
所做的那样,比如:
f_first_layer = theano.function([x], first_layer)
然后你可以在每次调用 train_model
之后,调用并打印这个函数的输出。如果你在调用 train_model
之前,用和之后调用 train_model
一样的参数来调用它,那么你就能得到 train_model
评估时各层的确切输出(如果在 train_model
之后调用它,结果会不同,因为会有更新)。