在Keras中自定义丢失功能有问题

时间:2017-10-06 19:21:13

标签: python deep-learning keras theano data-science

我在向binary_crossentropy添加惩罚时遇到了麻烦。当预定义的错误组的平均值超过某个阈值时,该想法是惩罚损失函数。 下面是辅助函数,它使用表示组的掩码和已计算的交叉熵。它只会返回违反某个阈值的次数,以惩罚调用它的实际损失函数。

def penalty(groups_mask, binary_crossentropy):
  errors = binary_crossentropy
  unique_groups = set(groups_mask)
  groups_mask = np.array(groups_mask)
  threshold = # whatever
  c = 0
  for group in unique_groups:
      error_mean = K.mean(errors[(groups_mask == group).nonzero()], axis=-1)
      if error_mean > threshold:
        c += 1
  return c

麻烦的是error_mean不是标量,我无法找出一种简单的方法来将其与阈值进行比较。

1 个答案:

答案 0 :(得分:2)

您必须使用张量和keras backend

中的函数执行所有操作
import keras.backend as K

在错误行中,您还必须使用这些函数进行比较:

....
c = K.variable([0])
.....
.....
    errorGreater = K.cast(K.greater(error_mean,threshold), K.floatx())
    c+=K.max(errorGreater) #if error_mean is 1 element only, you can just c+=errorGreater.