我在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。