zoukankan      html  css  js  c++  java
  • caffe模型的一些解释~

    转自:https://blog.csdn.net/wjmishuai/article/details/50890214

    刚开始摸caffe,找了个比较清楚的模型。

    原始数据是28*28 

    input: "data"
    input_dim: 60 // number of picture
    input_dim: 1 // channel
    input_dim: 1 // heigth
    input_dim: 784 // width

    input: "data"
    input_dim: 60 // number of picture
    input_dim: 1 // channel
    input_dim: 1 // heigth
    input_dim: 784 // width

    1:数据层:  
    layer {  
      name: "mnist"//数据层的名字是mnist  
      type: "Data"//这个层的类型是data  
      top: "data"//产生两个blob,一个是data blob  
      top: "label"//一个是lable blob  
      include {  
        phase: TRAIN  
      }  
      transform_param {  
        scale: 0.00390625//像素归一化  
      }  
      data_param {  
        source: "examples/mnist/mnist_train_lmdb"  
        batch_size: 64  
        backend: LMDB  
      }  
    }  
    2:卷积层  
    layer {  
      name: "conv1"  
      type: "Convolution"  
      bottom: "data"//获取上一层的data blob  
      top: "conv1"//产生conv1层  
      param {  
        lr_mult: 1//学习率。表示 weight的学习率和slover.pro中的学习率是一致的。  
      }  
      param {  
        lr_mult: 2//表示 bias的学习率是slover.pro中的学习率的2倍。  这样设置会导致更快的收敛  
      }  
      convolution_param {  
        num_output: 20//cov1层将产生输出20个通道  
        kernel_size: 5//卷积核大小是5*5  
        stride: 1//步长是1  
        weight_filler {//权重填充器,使用xavier算法填充weight。根据输入和输出神经元的数量自动确定初始化的规模。  
          type: "xavier"  
        }  
        bias_filler {//偏置填充器,使用constant算法填充bias。是一个常数,默认是0  
          type: "constant"  
        }  
      }  
    }  
    3:池化层(避免数据过拟合)  
    layer {  
      name: "pool1"  
      type: "Pooling"  
      bottom: "conv1"  
      top: "pool1"  
      pooling_param {  
        pool: MAX//使用MAX进行池化  
        kernel_size: 2//卷积核大小是2*2  
        stride: 2//步长是2  
      }  
    }  
      
    4:全连接层  
    layer {  
      name: "ip1"  
      type: "InnerProduct"  
      bottom: "pool2"  
      top: "ip1"  
      param {  
        lr_mult: 1  
      }  
      param {  
        lr_mult: 2  
      }  
      inner_product_param {  
        num_output: 500//产生500维的输出数据  
        weight_filler {  
          type: "xavier"  
        }  
        bias_filler {  
          type: "constant"  
        }  
      }  
    }  
      
    5:ReLU层(紧跟在全连接层后,目的是节省内存)  
    layer {  
      name: "relu1"  
      type: "ReLU"  
      bottom: "ip1"  
      top: "ip1"  
    }  
      
    ReLU层后紧跟一个InnerProduct层  
    layer {  
      name: "ip2"  
      type: "InnerProduct"  
      bottom: "ip1"  
      top: "ip2"  
      param {  
        lr_mult: 1  
      }  
      param {  
        lr_mult: 2  
      }  
      inner_product_param {  
        num_output: 10//因为有10类,所以输出10  
        weight_filler {  
          type: "xavier"  
        }  
        bias_filler {  
          type: "constant"  
        }  
      }  
    }  
      
    6:Loss层//不产生任何输出,只是用来计算损失函数的值,用来初始化ip2的gradient   
    layer {  
      name: "loss"  
      type: "SoftmaxWithLoss"  
      bottom: "ip2"//需要两个blob,一个是ip2,作为预测用  
      bottom: "label"//来自数据层,作为标签  
      top: "loss"  
    }  
  • 相关阅读:
    HTTP Status 500
    响应式导航页面
    Http状态码的种类及含义
    实时监听输入框值变化的完美方案:oninput & onpropertychange
    运动框架
    图片循环轮播
    html页面加载和解析流程
    js和jquery实现tab选项卡
    js遇到这样基础题,看你能不能作对呢
    sql统计重复数据
  • 原文地址:https://www.cnblogs.com/z1141000271/p/9016036.html
Copyright © 2011-2022 走看看