Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 结合交叉熵损失和mae损失的定制损失函数Keras用于有序分类_Tensorflow_Machine Learning_Keras_Deep Learning_Loss - Fatal编程技术网

Tensorflow 结合交叉熵损失和mae损失的定制损失函数Keras用于有序分类

Tensorflow 结合交叉熵损失和mae损失的定制损失函数Keras用于有序分类,tensorflow,machine-learning,keras,deep-learning,loss,Tensorflow,Machine Learning,Keras,Deep Learning,Loss,我正在尝试执行多类分类。理想情况下,我会使用交叉熵损失来训练我的神经网络。然而,我的类是顺序变量。因此,我希望我的损失函数能够在预测中执行某种顺序。例如y_true=2,那么我更喜欢y_predict=3而不是y_predict=4。为此,我考虑在softmax层之后,结合使用交叉熵损失和平均绝对损失的自定义损失函数: import from keras import backend as K from keras import losses loss_weight = [1,0.0001] l

我正在尝试执行多类分类。理想情况下,我会使用交叉熵损失来训练我的神经网络。然而,我的类是顺序变量。因此,我希望我的损失函数能够在预测中执行某种顺序。例如y_true=2,那么我更喜欢y_predict=3而不是y_predict=4。为此,我考虑在softmax层之后,结合使用交叉熵损失和平均绝对损失的自定义损失函数:

import from keras import backend as K
from keras import losses
loss_weight = [1,0.0001]
loss_weight_tensor = K.variable(value=loss_weight)

def custom_loss(y_true,y_pred):
   l1 = K.sparse_categorical_crossentropy(y_true,y_pred)
   y_pred_argmax = K.cast( K.argmax(y_pred,axis=1),dtype=K.tf.float32) 
   # y_pred_argmax get the class from softmax output
   l2 = losses.mean_absolute_error(y_pred_argmax, y_true)
   return l1*loss_weight_tensor[0] + l2*loss_weight_tensor[1]

我对这个损失函数的想法或构造是否存在谬误。如果我使用argmax,它看起来像是一个有效的损失函数(分段可微等)?你认为tensorflow后端会计算一个有效的梯度吗?或者,有没有更好的方法来实现有序分类?

您可以随时尝试看看它是否有效。我曾经致力于实现比例赔率模型的负对数可能性,该模型可以包装为自定义的Keras损失。代码是,您可以随时查看它。这不是编写此解决方案的最有效方法,但它可以工作,并且笔记本中包含一些参考资料。祝你好运谢谢分享你的想法和代码!!