2016-12-05 75 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

相关问题