我正在尝试获取损失目标的梯度,在我的例子中是 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/