TensorFlow:获取梯度批量规范和偏差

TensorFlow: getting gradients batch-norm and bias

我正在训练在 TensorFlow Keras 中实现的神经网络。

    model.fit(..., callbacks=[..., CustomCallback()])

我的 objective - 在训练期间得到:

  1. 梯度:params - 用于更新权重的梯度,以及层传播的梯度。
  2. 偏差
  3. BatchNorm:运行 均值,运行 var,Gamma,Beta
  4. 获取输入和目标

我正在使用keras.callbacks.Callback

class CustomCallback(keras.callbacks.Callback):
    ...
    def on_train_batch_end(self, batch, logs=None):
    # 1.) Get gradients
    # 2.) Get bias
    # 3.) Get BN: running mean, running var, Gamma, Beta
    # 4.) Input and target

我找到了如何从 self.model 获取权重。我如何获得我提到的所有张量?

您可以通过以下方式获取所有张量值:

class CustomCallback(keras.callbacks.Callback):
...
def on_train_batch_end(self, batch, logs=None):
    # 1.) Append gradients tensor names to fetches_names
    # 2.) Append bias tensors names to fetches_names
    # 3.) Append running mean, running var, Gamma, Beta to fetches_names
    output = session.run(fetches_names, feeds)

fetches_names - 字符串列表,包括我们希望读取的张量的名称 只读取梯度可以通过调用 Keras 后端的梯度函数来完成:

from keras import backend as K
grads = K.gradients(loss, input_img)

这个函数的作用是编辑图表。