python - 如何使用 Tensorflow 后端在 Keras 上获取 categorical_cross_entropy 的梯度?

标签 python tensorflow deep-learning keras loss-function

我正在尝试获取损失目标的梯度,在我的例子中是 categorical_cross_entropy w.r.t 到 NN 参数,例如“权重”和“偏差”。

这样做的原因是我想以上述为基础实现一个回调函数,通过它我可以在训练时调试模型。

所以,问题来了。

我目前正在使用生成器方法对数据集进行拟合、评估和预测。

Keras中的categorical_cross_entropy损失函数实现如下:

def categorical_crossentropy(y_true, y_pred):
    return K.categorical_crossentropy(y_true, y_pred)

我可以使用 y_pred 的唯一方法是在训练模型结束时进行评估/预测。

所以,我要问的是:

  • 有没有办法像上面提到的那样创建回调?
  • 如果有人已经使用 categorical_cross_entropy 实现了像上面那样的回调,请告诉我如何让它工作?
  • 最后,如何计算其数值梯度?

目前,这是我用来计算梯度的代码。但是,我不知道这是对还是错。 Link.

def symbolic_gradients(model, input, output):
    grads = K.gradients(model.total_loss, model.trainable_weights)
    inputs = model.model._feed_inputs + model.model._feed_targets + 
    model.model._feed_sample_weights
    fn = K.function(inputs, grads)

    return fn([input, output, np.ones(len(output))])

理想情况下,我想让这个模型不可知,但即使不是,也没关系。

最佳答案

我可以帮助处理渐变部分。我正在使用此函数来计算损失函数 w.r.t 输出的梯度。

def get_loss_grad(model, inputs, outputs):
    x, y, sample_weight = model._standardize_user_data(inputs, outputs)
    grad_ce = K.gradients(model.total_loss, model.output)
    func = K.function((model._feed_inputs + model._feed_targets + model._feed_sample_weights), grad_ce)
    return func(x + y + sample_weight)

关于python - 如何使用 Tensorflow 后端在 Keras 上获取 categorical_cross_entropy 的梯度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49803266/

相关文章:

tensorflow - 图像分类 : Heavily unbalanced data over thousands of classes

python - 如何确定 fabfile 中的结构角色以将特定文件发送到主机

python - Kivy 网格布局固定某些列的列宽

tensorflow - 特征列嵌入查找

tensorflow - 在 TensorFlow 中保存特定权重

python - Sagemaker 脚本模式训练 : How to import custom modules in training script?

python - Keras——使用 LSTM 层时精度较低,但不使用 LSTM 时精度很好

Python 同时递增两个字符串

python - 检查 python 是否删除文件夹成功,如果成功,则继续

python - Keras Tensorflow 将模型 NN 修改为 CNN