可以将梯度添加到损失函数中吗?

时间:2018-10-04 12:47:13

标签: python tensorflow machine-learning keras

我想编写一个自定义损失函数,对喀拉拉山的梯度施加约束。例如l2正则化。

 def Custom_loss(model,X,y):
        def loss(y_true,y_pred):
            return K.categorical_crossentropy(y_true, y_pred) + l2(get_gradients(model,X,y)
        return loss

get_gradients的代码是:

def get_gradients(model, inputs, outputs):
  grads = model.optimizer.get_gradients(model.total_loss, model.trainable_weights)
  symb_inputs = (model._feed_inputs + model._feed_targets + model._feed_sample_weights)
  f = K.function(symb_inputs, grads)
  x, y, sample_weight = model._standardize_user_data(inputs, outputs)
  output_grad = f(x + y + sample_weight)
  return output_grad

但是它输出错误

  

InvalidArgumentError(请参阅上面的回溯):您必须使用dtype float和shape [?]输入占位符张量'dense_1_sample_weights'的值。        [[节点:deny_1_sample_weights = Placeholderdtype = DT_FLOAT,shape = [?],_ device =“ / job:localhost /副本:0 / task:0 / device:CPU:0”]]

当我计算损失函数之外的梯度时,它可以正常运行。 为什么我不能计算损失函数中的梯度?如果可以,应该如何更改代码?谢谢。

0 个答案:

没有答案