我想建立一个网络,对于给定的输入,预测一天中的时间。结果应在 0 到 24 的范围内。
我试图将其作为分类问题来解决,但这似乎不是正确的方法。我的问题是我不知道如何构建循环损失函数。例如,在我的情况下,如果网络的输出为 1,而真正的标签为 23,我希望距离为 2 而不是 22。是否有我可以使用的层?
我想建立一个网络,对于给定的输入,预测一天中的时间。结果应在 0 到 24 的范围内。
我试图将其作为分类问题来解决,但这似乎不是正确的方法。我的问题是我不知道如何构建循环损失函数。例如,在我的情况下,如果网络的输出为 1,而真正的标签为 23,我希望距离为 2 而不是 22。是否有我可以使用的层?
据我所知,没有预先编写的循环损失函数。对于循环损失,您应该编写自己的损失函数,如下所示:
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'])
但是,如果您这样定义损失,则不是分类问题。如果您想要一个分类问题,您应该使用 one-hot 编码对输出进行编码,并使用交叉熵作为损失函数。然后你有一天中每个小时的概率,你选择概率最高的小时。
作为回归任务,您可以使用如上所述的循环损失函数。