实现自定义丢失功能,以最大化密钥和非密钥之间的KL差异

问题描述

据我所知,训练神经网络的最常用方法是最小化数据分布和模型分布的输出间的KL差异,从而使交叉熵最小。现在假设我们有一个二进制分类任务,我们的目标可以是优化网络,以使两个类别分布之间的KL差异最大。我有一个需要最大化两个类分布之间的KL散度的应用程序。我在keras中实现了自定义损失功能,但遇到了以下错误。有没有更好的方法来实现此功能
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,K.floatx())
      q_1=K.sum(q_1)

      q_0=K.cast(K.greater((1-y_true)*y_pred,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))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)