如何在Keras中训练时计算梯度?

时间:2019-05-28 20:07:48

标签: python tensorflow keras

我在Keras中有一个模型,我想为其输出模型结果和输入斜率。 total_loss

存在两个讨论如何获得渐变的答案,据我所知。

Getting gradient of model output w.r.t weights using Keras

How to obtain the gradients in keras?

但是,这两个答案都提供了一种解决方案,该解决方案需要复制您的向前/向后通过计算,以便在单独的sess.run调用中输出梯度。

在本机张量流中执行此操作很容易,渐变只是您从模型输出的张量。但是,在Keras中,损耗不是在生成模型输出张量时定义的,而是在compile(...)中定义的,因此不能将渐变创建为普通模型输出。

在Keras的训练步骤中,必须有一种方法可以向正在执行的图形计算中添加操作(梯度),这样我就可以在回调中或作为模型输出来访问它们。

除非有人知道更好的方法,否则我唯一能想到的就是从模型输出不可训练变量,并在compile(...)中添加一个assign op,该操作将梯度分配给不可训练变量。但这变得很hacky。

0 个答案:

没有答案