如何获取、编辑和设置 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
我正在创建一个稀疏神经网络,如下图所示。 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