Caffe常用层参数介绍

本文详细介绍了Caffe框架中常见的层参数,包括DATA层的crop选项,CONVOLUTION层的weight_filler和bias_filler设置,ReLU层的negative_slope,LRN层,POOLING层,INNERPRODUCT层,ACCURACY层的top_k准确率计算,以及SOFTMAX_LOSS层的softmax计算。这些参数对于理解和调整模型至关重要。

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

DATA

crop:截取原图像中一个固定patch

layers {
  name: "data"
  type: DATA
  top: "data"
  top: "label"
  data_param {
    source: "../data/ImageNet/imagenet-train" #数据存放位置
    batch_size: 128 #一次批处理的大小,视内存大小而定。四维数组N*C*H*W中的N
    backend: LMDB #数据库类型,默认为leveldb
  }
  include: { phase: TRAIN } #如果加了这一行的话表示是在训练过程中使用该层,可将TRAIN替换为TEST
}

CONVOLUTION

layer {
  name: "conv"
  type: "Convolution"
  bottom: "data"
  top: "conv"
  param {  
    lr_mult: 1 #权重的学习率 该层lr=lr_mult*base_lr
    decay_mult: 1 #权重的衰减值
  }
  param {  
    lr_mult: 2 #偏置项的学习率
    decay_mult: 0 #偏置项的衰减值
  }
  convolution_param {
    num_output: 96 #该层输出的filter的个数。四维数组N*C*H*W中的W
    kernel_size: 11 #卷积核大小11*11。可设定长kernel_h与宽kernel_w
    stride: 4 #步长,也就是卷积核滑动的距离
    weight_filler { #卷积核初始化方式
      type: "gaussian" #高斯分布
      std: 0.01 #标准差为0.01
    }
    bias_filler { #偏置项初始化方式
      type: "constant" #连续分布
      value: 0
    }
  }
}

这里说一下关于weight_filler和bias_filler的几种设定方式:

TYPE PARAM EXPLAIN
Constant Value 以常量初始化,初始化值为[Value]
Gaussian std,mean 以高斯分布方式初始化,均值为[mean],标准差为[std]
uniform min,max 均匀分布,[min,max]
xavier scale 均匀分布,[-scale,scale],scale=sqrt(3/K*H*W)
<
### 计算Caffe框架下ECO模型的参数量 为了在Caffe框架内计算或查看ECO模型的参数数量,可以采用多种方法来获取这一信息。一种常用的方法是通过分析`prototxt`文件并利用Python脚本辅助完成统计工作。 #### 方法一:手动解析Prototxt文件 可以直接打开用于定义网络架构的`.prototxt`文件,在该文件中每一都会明确定义其权重尺寸以及偏置项(如果存在)。对于卷积而言,参数数目等于`(kernel_height * kernel_width * input_channels + 1) * output_channels`[^2]。而对于全连接,则简单得多——即输入节点数乘以输出节点数再加上偏置项的数量。因此,可以通过逐累加各所含有的可学习参数总数得到整个模型的参数规模。 #### 方法二:使用Python脚本自动化处理 编写一段简单的Python代码可以帮助更高效地完成这项任务: ```python import caffe from collections import defaultdict def count_params(prototxt_path, caffemodel_path): net = caffe.Net(prototxt_path, caffemodel_path, caffe.TEST) param_counts = defaultdict(int) for layer_name, blobs in zip(net._layer_names, net.blobs.items()): if 'conv' in str(layer_name).lower() or 'fc' in str(layer_name).lower(): params = sum([blob.data.size for blob in blobs]) param_counts[layer_name.decode()] += params total_params = sum(param_counts.values()) print(f'Total parameters: {total_params}') return dict(param_counts), total_params # 调用函数传入具体的路径名 param_dict, total_param_count = count_params('models_ECO_Lite/kinetics/deploy.prototxt', 'models_ECO_Lite/kinetics/snapshot_iter_XXXXX.caffemodel') ``` 此段代码首先加载指定的`.prototxt`和对应的预训练好的`.caffemodel`文件构建出一个测试模式下的网络实例对象net;接着遍历所有图的名字及其关联的数据blobs,针对含有“conv”或“fc”的名称判断是否为卷积或是全连接,并据此累计相应的参数个数至字典变量`param_counts`之中;最后打印出总的参数计数值。 需要注意的是,实际操作过程中应当依据个人环境适当调整上述示例中的文件路径以及其他设置选项[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值