caffe 如何让反向传播不更新某些层

本文介绍了如何在Caffe框架中冻结特定卷积层以防止其参数被更新。提供了两种方法:一是通过设置propagate_down参数来阻止梯度传递;二是通过将学习率设置为0来停止特定层权重和偏置的更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

caffe程序中,有时候我们不需要更新某些层,那么我们该怎么做呢?


假设共有5个卷积层,conv1,conv2,conv3,conv4,conv5

为了方便,假设只有这5个卷积层,没有pool层与relu层

卷积层的定义为

layer

{

  name:"conv1"

  type:"Convolution"

  bottom: "data"
  top: "conv1"
  convolution_param {
    num_output: 64
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
    }
  }

}

1.如果希望conv1,conv2,conv3都不更新,

那么在conv4的layer定义中,可以添加一句propagate_down : 0

即将层定义修改为:

layer

{

  name:"conv4"

  type:"Convolution"

  bottom: "conv3"
  top: "conv4"

propagate_down : 0
  convolution_param {
    num_output: 64
    pad: 1
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
    }
  }

}


通过增加的propagate_down : 0,反向传播会终止在conv4层,忽略conv1,conv2,conv3




2.如果只是希望conv3不更新,conv1,conv2与conv4,conv5都更新:

那么可以将conv3的学习率设为0

即:

layer {
    name: "conv3"
    type: "Convolution"
    bottom: "conv2"
    top: "conv3"
    param {
        lr_mult: 0.000000
    }
    param {
        lr_mult: 0.000000
    }
    convolution_param {
        num_output: 64
        kernel_size: 3
        stride: 1
        pad: 1
         weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
    }
    }
}

将weight_filter与bias_filter的学习率均设为0即可



参考:https://zhidao.baidu.com/question/363059557656952932.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值