Keras 实现自定义损失函数,最大化关键帧和非关键帧之间的KL差异
据我所知,训练神经网络最常用的方法是最小化数据分布和模型分布输出之间的KL发散,从而最小化交叉熵。现在假设我们有一个二元分类任务,我们的目标是优化网络,使两类分布之间的KL差异最大化。我有一个应用程序需要最大化两类分布之间的KL差异。我在keras中实现了一个自定义损失函数,但出现了以下错误。有没有更好的方法来实现这个功能Keras 实现自定义损失函数,最大化关键帧和非关键帧之间的KL差异,keras,backend,loss-function,Keras,Backend,Loss Function,据我所知,训练神经网络最常用的方法是最小化数据分布和模型分布输出之间的KL发散,从而最小化交叉熵。现在假设我们有一个二元分类任务,我们的目标是优化网络,使两类分布之间的KL差异最大化。我有一个应用程序需要最大化两类分布之间的KL差异。我在keras中实现了一个自定义损失函数,但出现了以下错误。有没有更好的方法来实现这个功能 ValueError: No gradients provided for any variable: ['dense/kernel:0', 'dense/bias:0',
ValueError: No gradients provided for any variable: ['dense/kernel:0', 'dense/bias:0', 'dense_1/kernel:0', 'dense_1/bias:0', 'dense_2/kernel:0', 'dense_2/bias:0'].
def loss(y_true,y_pred):
y_true=K.flatten(y_true)
y_pred=K.flatten(y_pred)
p_1=K.cast(K.greater(y_true*y_pred,0.5), K.floatx())
p_1=K.sum(p_1)
p_0=K.cast(K.greater(y_true*y_pred,K.epsilon()), K.floatx())
p_0=K.sum(p_0)-p_1
q_1=K.cast(K.greater((1-y_true)*y_pred,0.5), K.floatx())
q_1=K.sum(q_1)
q_0=K.cast(K.greater((1-y_true)*y_pred,K.epsilon()), K.floatx())
q_0=K.sum(q_0)-q_1
p_total=p_0+p_1
q_total=q_0+q_1
p_0=p_0/p_total
p_1=p_1/p_total
q_0=q_0/q_total
q_1=q_1/q_total
return 0-(p_0*K.log(p_0/q_0)+p_1*K.log(p_1/q_1))