2016-12-05 30 views
0

我想構建一個網絡,對於給定的輸入,預測一天中的小時。結果應該在0到24範圍內。張量流中的循環損失

我試圖將其解決爲分類問題,但似乎並不正確。我的問題是,我不知道如何建立循環損失函數。例如,在我的情況下,如果網絡的輸出爲1,真實標籤爲23,我希望距離爲2而不是22.是否有可用的圖層?

+0

歡迎來到SO!這是一個很好的問題;它不應該被拒絕。但是,總是希望顯示一些您所做的工作,理想情況下使用代碼或僞代碼片段。這會使你的問題不太可能被誤解爲缺乏研究和努力。 – Praveen

回答

1

據我所知,沒有預先寫好的循環損失函數。對於週期性損失,你應該寫你自己的損失函數是這樣的:

import keras.backend as K 
def cyclic_loss(y_true, y_pred): 
    return K.min((y_pred +24 - y_true) % 24, (y_true + 24 - y_pred) % 24) 

model.compile(optimizer='sgd', loss=cyclic_loss, metrics=['acc']) 

但是如果你定義了你的損失一樣,它不是一個分類問題。如果您想要分類問題,您應該使用單熱編碼對輸出進行編碼,並使用交叉熵作爲丟失函數。那麼你有一天的每個小時的可能性,你以最高的概率獲得小時。

作爲迴歸任務,您可以使用上述的循環損失函數。

+0

非常感謝。它似乎是我應該使用它作爲迴歸任務。如果我嘗試在tensorflow中編寫它,它是同樣的損失嗎? – GiladD

+0

如果您使用keras作爲包裝是。如果沒有,你將不得不使用tensorflow後端。我沒有直接使用tensorflow後端的優點,所以我不能肯定地說。 –

+0

好的,謝謝我將與keras合作。有一種方法可以確保y_pred的輸出是以24爲模的嗎?我把relu做成y_pred> 0(Dense(1,activation ='relu',name = y_pred),但方式不會更高,那麼24 ?凹面和非凸面的損失函數 – GiladD