权重稀疏
作用
增加权重的0个数量,加快推理速度
pytorch权重稀疏训练
通过L1损失来减少神经网络权重, 使得大部分权重接近于0.
注意点: 最后一层和bias层通常不进行稀疏.
原理, 通过每一个权重等系数的减少来进行权重稀疏.
l1_reg = None
for i, W in enumerate(network.parameters()):
if i == 64 or i == 54 or i == 44 or i == 34 or i % 2 == 1:
continue
filters1 = W.shape[1]
filters2 = W.shape[0]
# 该层权重个数
reg_power = 9 * filters1 * filters2
reg_lambda = (1. / reg_power)
if l1_reg is None:
l1_reg = reg_lambda * W.norm(p=1)
else:
l1_reg = l1_reg + reg_lambda * W.norm(p=1)
print('l1 loss', l1_reg)
keras 权重稀疏训练
keras 的权重稀疏较为简单,在每一层卷积中添加:
kernel_regularizer=regularizers.l1((1. / filters3) * regularize)
其中 filters3 为通道数, regularize为3的n次方,设定按通道数设置.
x = layers.Conv2D(filters3, (1, 1),
kernel_initializer='he_normal',
kernel_regularizer=regularizers.l1((1. / filters3) * regularize),
dtype=dtype,
name=conv_name_base + '2c')(x)