caffe各层参数详解

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: caffe各层参数详解

 在prototxt文件中,层都是用layer{}的结构表示,而里面包含的层的参数可以在caffe.proto文件中找到,比如说Data类型的结构由message DataParameter所定义,Convolution类型的结构由message ConvolutionParameter所定义。

具体说明下:

    • name表示该层的名称
    • type表示该层的类型,如Data或者Convolution类型
    • top表示该层后接的Blob结构的名称
    • bottom表示该层前接的Blob数据结构的名称
    • *_param表示该层的参数,比如对于某卷积层conv1来说,convolution_param
      • num_output表示输出通道数
      • pad表示卷积pad
      • kernel_size表示卷积核的大小

        这里我推荐一个资源:caffe网络模型各个层详解

        https://download.csdn.net/download/pbymw8iwm/10706680

        数据层

        {
          name: "data"
          type: "Data"
          top: "data"
          top: "label"
          transparam {
            scale: 0.003920625        // 归一化:1/256
          }
          include {
            phase: TRAIN/TEST         // 训练阶段
          }
          data_param {
            source: "examples/mnist/train_lmdb"
            batch_size: 64           // 批量处理数
            backend: LMDB            // 数据格式,LMDB/HDF5等
          }
        }

        image.gif

        卷积层

        卷积层是CNN网络的核心,一般用来提取图像特征。

        layer {
          name: "conv"
          type: "Convolution"
          bottom: "data"
          top: "conv"
          param {
            lr_mult: 1             // weight的学习率
            decay_mult: 1          // 权重衰减
          }
          param {
            lr_mult: 2            // bias的学习率
            decay_mult: 0
          }
          convolution_param {
            num_output: 20        // 通道数
            kernel_size: 5        // 卷积核大小
            stride: 1             // 步长
            weight_filter {       // 权重初始化,xavier/guassion/constant
              type: "xavier"      // 一种均匀化分布
            }
            bias_filter {         // 偏置初始化
              type: "constant"    // 值全为0
            }
          }
        }

        image.gif

        Pool层

        池化层,用来减小训练参数规模。

        layer {
          name: "pool"
          type: "Pooling"
          bottom: "conv"
          top: "pool"
          pooling_param {
            pool: MAX             // 最大化,还有均值化/最小化
            kernel_size: 2        // 卷积核大小,缩放效果
            stride: 2             // 步长
          }
        }

        image.gif

        全连接层

        类似卷积层

        layer {
          name: "ip"
          type: "InnerProduct"
          bottom: "pool"
          top: "ip"
          param {
            lr_mult: 1
          }
          param {
            lr_mult: 2
          }
          inner_product_param {
            num_output: 10
            weight_filter {
              type: "xavier"
            }
            bias_filter {
              type: "constant"
            }
          }
        }

        image.gif

        Relu层

        激活函数

        layer {
          name: "relu"
          type: "Relu"
          bottom: "ip"
          top: "ip"
        }

        image.gif

        Accuracy层

        一般在测试阶段看到训练精度。

        layer {
          name: "accuracy"
          type: "Accuracy"
          bottom: "ip"
          bottom: "label"
          top: "accuracy"
          include {
            phase: TEST
          }
        }

        image.gif

        Softmax层

        损失函数,常用于多个分类

        layer {
          name: "loss"
          type: "SoftmaxWithLoss"
          bottom: "ip"
          bottom: "label"
          top: "loss"
        }

        image.gif

        BatchNormal层

        批量正则化,不依赖于初始值,加快训练速度。

        layer {
          name: "batchnorm"
          type: "BatchNorm"
          bottom: "conv"
          top: "conv"
          batch_norm_param {
            use_global_stats: true
          }
          include {
            phase: TRAIN/TEST
          }
        }

        image.gif

        Scale层

        BN层后面一般都要带Scale层,和batchnorm计算公式中的参数有关。

        layer {
          name: "scale"
          type: "Scale"
          bottom: "conv"
          top: "conv"
          scale_param {
            bias_term: true
          }
        }

        image.gif

        Dropout层

        Dropout是一个防止过拟合的trick。可以随机让网络某些隐含层节点的权重不工作。

        layer {
          name: "drop7"
          type: "Dropout"
          bottom: "fc7-conv"
          top: "fc7-conv"
          dropout_param {
            dropout_ratio: 0.5
          }
        }

        image.gif


        相关文章
        |
        6月前
        |
        PyTorch 算法框架/工具
        Bert PyTorch 源码分析:一、嵌入层
        Bert PyTorch 源码分析:一、嵌入层
        77 0
        |
        6月前
        |
        PyTorch 算法框架/工具
        Pytorch中最大池化层Maxpool的作用说明及实例使用(附代码)
        Pytorch中最大池化层Maxpool的作用说明及实例使用(附代码)
        571 0
        |
        6月前
        |
        机器学习/深度学习 数据可视化 PyTorch
        PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
        这篇文章将演示如何可视化PyTorch激活层。可视化激活,即模型内各层的输出,对于理解深度神经网络如何处理视觉信息至关重要,这有助于诊断模型行为并激发改进。
        139 1
        |
        6月前
        ncnn中Yolov3DetectionOutput层各个参数的含义
        ncnn中Yolov3DetectionOutput层各个参数的含义
        32 1
        |
        6月前
        |
        机器学习/深度学习 PyTorch 算法框架/工具
        PyTorch中的自定义层与模块开发
        【4月更文挑战第18天】PyTorch教程:通过继承`nn.Module`创建自定义层和模块。自定义层需实现`__init__`(初始化参数)和`forward`(前向传播逻辑)方法。示例代码展示了一个简单的`CustomLinear`层和包含该层及ReLU激活的`CustomModule`。自定义模块可组合多个层,如`SimpleNet`模型中使用两个`CustomModule`。这使得构建满足特定需求的复杂神经网络成为可能。
        |
        6月前
        |
        机器学习/深度学习 TensorFlow 算法框架/工具
        TensorFlow中的自定义层与模型
        【4月更文挑战第17天】本文介绍了如何在TensorFlow中创建自定义层和模型。自定义层通过继承`tf.keras.layers.Layer`,实现`__init__`, `build`和`call`方法。例如,一个简单的全连接层`CustomDenseLayer`示例展示了如何定义激活函数。自定义模型则继承自`tf.keras.Model`,在`__init__`中定义层,在`call`中实现前向传播。这两个功能使TensorFlow能应对特定需求和复杂网络结构,增强了其在深度学习应用中的灵活性。
        |
        人工智能 数据可视化 TensorFlow
        从Tensorflow模型文件中解析并显示网络结构图(CKPT模型篇)
        从Tensorflow模型文件中解析并显示网络结构图(CKPT模型篇)
        从Tensorflow模型文件中解析并显示网络结构图(CKPT模型篇)
        |
        PyTorch 算法框架/工具
        【PyTorch】初始化网络各层权重
        【PyTorch】初始化网络各层权重
        63 0
        |
        机器学习/深度学习 存储 人工智能
        从Tensorflow模型文件中解析并显示网络结构图(pb模型篇)
        从Tensorflow模型文件中解析并显示网络结构图(pb模型篇)
        从Tensorflow模型文件中解析并显示网络结构图(pb模型篇)