權重稀疏訓練

權重稀疏

作用

增加權重的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)

參考文獻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章