![](/img/trans.png)
[英]How to add broadcastable tensor with given values to another tensor in Theano?
[英]How to theano tensor sum an array with nan values
我正在使用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应该给我一个标量值,相反它显示了我尝试使用numpy nansum()的array(nan),但这给了我一个错误。 用NaN值对数组求和的正确方法是什么? 任何建议将不胜感激。
由于数值问题,NaN随时可能弹出,因此基本上是不可避免的。 我在theano中寻找用于处理nan的函数,但没有找到任何对我有用的东西。
当您完全了解nan
的含义时, switch()
和isnan()
提供了一条出路:
KL = T.switch(T.isnan(KL), 0., KL)
其中KL
是包含nan
的张量,您希望将其替换为0
(尽管有一定的代价)。
然后,您可以像平常的任何一天一样T.sum(KL)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.