簡體   English   中英

如何theano張量將具有nan值的數組求和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM