我想写一个自定义损失函数对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 [?] [[Node:dense_1_sample_weights = Placeholderdtype = DT_FLOAT,shape = [?],_device =“/ job)为占位符张量'dense_1_sample_weights'提供值:本地主机/复制:0 /任务:0 /装置:CPU:0" ]]

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