如何获取、编辑和设置 Keras 模型训练中的梯度矩阵?

How can I Get, Edit and Set Gradient Matrix in Training of Keras Model?

我正在创建一个稀疏神经网络,如下图所示。 Keras 只提供了一个密集层,我们无法选择我们想要连接到上一层的神经元数量。为了使用 Keras 实现这一点,我正在尝试实现以下方法:

1-获取每个epoch中每一层的梯度矩阵

2- 将梯度矩阵与掩码矩阵相乘使其稀疏

3-根据更新后的梯度矩阵更新新的权重

我无法在 Keras 中找到梯度矩阵。我怎样才能得到它并在 epochs 期间更新它?

tf.GradientTape() 仅用于查看渐变。

提前致谢。请看下面的附件

Sparse Network Image

与其手动处理梯度矩阵,不如应用 TensorFlow 剪枝技术。我们可以通过传递参数对模型的每一层应用剪枝。

 pruning_params = {
  'pruning_schedule':
      PolynomialDecay(
          initial_sparsity=0.1,
          final_sparsity=0.75,
          begin_step=1000,
          end_step=5000,
          frequency=100)}

对于每一层被选择剪枝的层,它都会添加一个与层的权重张量大小和形状相同的二进制掩码变量,并确定哪些权重参与图的前向执行。 Tensorflow 引入了一种新的自动渐进修剪算法,其中稀疏度从初始稀疏度值(通常为 0)增加到 n 个修剪步骤跨度的最终稀疏度值,从训练步骤 t0 开始,修剪频率为 Δt。 您可以通过以下代码添加修剪层:

prune.prune_low_magnitude(
          l.Conv2D(32, 5, padding='same', activation='relu'),
          input_shape=input_shape,
          **pruning_params)

完整教程可用here