如何对theano张量求和具有nan值的数组

时间:2016-08-26 13:22:35

标签: python arrays numpy theano nan

我正在使用Theano编写自动编码器模型,(我是Theano的新手)。成本函数具有稀疏性约束。 KL发散函数在数组中产生NaN值,当我对数组求和以将其添加到总成本时它给出NaN值。有没有办法解决这个问题。

KL = rho * (T.log(rho/rho_hat)) + (1 - rho) * (T.log((1 - rho)/(1 - rho_hat)))
# sparsity cost
SPcost = beta * KL.nansum()
# the loss function 
loss = T.nnet.categorical_crossentropy(y_hat, y).mean() + loss_reg 

我正在尝试使用测试功能进行调试

test=theano.function([X], SPcost)
test(train_X)

SPcost应该给我一个标量值,而不是它显示数组(nan) 我试图使用numpy nansum(),但这给了我一个错误。使用NaN值对数组求和的正确方法是什么?任何建议将不胜感激。

由于数字问题NaN可能随时弹出,所以基本上是不可避免的。我在theano寻找处理nan的功能,但没有找到任何有帮助我的东西。

1 个答案:

答案 0 :(得分:0)

当您遇到nan时,您完全理解其含义,switch()isnan()提供了一条出路:

KL = T.switch(T.isnan(KL), 0., KL)

其中KL是一个包含nan的张量,您希望用0代替(尽管需要支付一定的费用)。

然后您可以T.sum(KL)像平常一样。