權重稀疏
作用
增加權重的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)