微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决实现自定义丢失功能,以最大化密钥和非密钥之间的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 举报,一经查实,本站将立刻删除。