张量流中的循环损失
Cyclic loss in tensorflow
我想建立一个网络,根据给定的输入,预测一天中的时间。结果应在 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'])
然而,如果你这样定义你的损失,这不是分类问题。如果你想要一个分类问题,你应该使用单热编码对你的输出进行编码,并使用交叉熵作为损失函数。然后你有一天中每个小时的概率,你会选择概率最高的那个小时。
作为回归任务,您可以使用如上所述的循环损失函数。
我想建立一个网络,根据给定的输入,预测一天中的时间。结果应在 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'])
然而,如果你这样定义你的损失,这不是分类问题。如果你想要一个分类问题,你应该使用单热编码对你的输出进行编码,并使用交叉熵作为损失函数。然后你有一天中每个小时的概率,你会选择概率最高的那个小时。
作为回归任务,您可以使用如上所述的循环损失函数。