Caffe学习系列(5):其它常用层及参数

本文讲解一些其它的常用层,包括:softmax_loss层,Inner Product层,accuracy层,reshape层和dropout层及其它们的参数配置。

1、softmax-loss

softmax-loss层和softmax层计算大致是相同的。softmax是一个分类器,计算的是类别的概率(Likelihood),是Logistic Regression 的一种推广。Logistic Regression 只能用于二分类,而softmax可以用于多分类。

softmax与softmax-loss的区别:

softmax计算公式:

而softmax-loss计算公式:

关于两者的区别更加具体的介绍,可参考:softmax vs. softmax-loss

用户可能最终目的就是得到各个类别的概率似然值,这个时候就只需要一个 Softmax层,而不一定要进行softmax-Loss 操作;或者是用户有通过其他什么方式已经得到了某种概率似然值,然后要做最大似然估计,此时则只需要后面的 softmax-Loss 而不需要前面的 Softmax 操作。因此提供两个不同的 Layer 结构比只提供一个合在一起的 Softmax-Loss Layer 要灵活许多。

不管是softmax layer还是softmax-loss layer,都是没有参数的,只是层类型不同而也

softmax-loss layer:输出loss值

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

softmax layer: 输出似然值

layers {
  bottom: "cls3_fc"
  top: "prob"
  name: "prob"
  type: “Softmax"
}

2、Inner Product

全连接层,把输入当作成一个向量,输出也是一个简单向量(把输入数据blobs的width和height全变为1)。

输入: n*c0*h*w

输出: n*c1*1*1

全连接层实际上也是一种卷积层,只是它的卷积核大小和原数据大小一致。因此它的参数基本和卷积层的参数一样。

层类型:InnerProduct

lr_mult: 学习率的系数,最终的学习率是这个数乘以solver.prototxt配置文件中的base_lr。如果有两个lr_mult, 则第一个表示权值的学习率,第二个表示偏置项的学习率。一般偏置项的学习率是权值学习率的两倍。

必须设置的参数:

  num_output: 过滤器(filfter)的个数

其它参数:

  weight_filler: 权值初始化。 默认为“constant",值全为0,很多时候我们用"xavier"算法来进行初始化,也可以设置为”gaussian"

  bias_filler: 偏置项的初始化。一般设置为"constant",值全为0。

   bias_term: 是否开启偏置项,默认为true, 开启

layer {
  name: "ip1"
  type: "InnerProduct"
  bottom: "pool2"
  top: "ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 500
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}

3、accuracy

输出分类(预测)精确度,只有test阶段才有,因此需要加入include参数。

层类型:Accuracy

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

4、reshape

在不改变数据的情况下,改变输入的维度。

层类型:Reshape

先来看例子

 layer {
    name: "reshape"
    type: "Reshape"
    bottom: "input"
    top: "output"
    reshape_param {
      shape {
        dim: 0  # copy the dimension from below
        dim: 2
        dim: 3
        dim: -1 # infer it from the other dimensions
      }
    }
  }

有一个可选的参数组shape, 用于指定blob数据的各维的值(blob是一个四维的数据:n*c*w*h)。

dim:0  表示维度不变,即输入和输出是相同的维度。

dim:2 或 dim:3 将原来的维度变成2或3

dim:-1 表示由系统自动计算维度。数据的总量不变,系统会根据blob数据的其它三维来自动计算当前维的维度值 。

假设原数据为:64*3*28*28, 表示64张3通道的28*28的彩色图片

经过reshape变换:

   reshape_param {
      shape {
        dim: 0
        dim: 0
        dim: 14
        dim: -1
      }
    }

输出数据为:64*3*14*56

5、Dropout

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

先看例子:

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

只需要设置一个dropout_ratio就可以了。

还有其它更多的层,但用的地方不多,就不一一介绍了。

随着深度学习的深入,各种各样的新模型会不断的出现,因此对应的各种新类型的层也在不断的出现。这些新出现的层,我们只有在等caffe更新到新版本后,再去慢慢地摸索了。

时间: 2025-02-01 08:03:06

Caffe学习系列(5):其它常用层及参数的相关文章

Caffe学习系列(2):数据层及参数

要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成.所有的参数都定义在caffe.proto这个文件中.要熟练使用caffe,最重要的就是学会配置文件(prototxt)的编写. 层有很多种类型,比如Data,Convolution,Pooling等,层之间的数据流动是以Blobs的方式进行. 今天我们就先介绍一下数据层. 数据层是每个模型的最底层,是模型的入口,不仅提供数据的输入,也提供数据从B

转 Caffe学习系列(2):数据层及参数

http://www.cnblogs.com/denny402/p/5070928.html 要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成.所有的参数都定义在caffe.proto这个文件中.要熟练使用caffe,最重要的就是学会配置文件(prototxt)的编写. 层有很多种类型,比如Data,Convolution,Pooling等,层之间的数据流动是以Blobs的方式进行. 今天我们就

转 Caffe学习系列(3):视觉层(Vision Layers)及参数

所有的层都具有的参数,如name, type, bottom, top和transform_param请参看我的前一篇文章:Caffe学习系列(2):数据层及参数 本文只讲解视觉层(Vision Layers)的参数,视觉层包括Convolution, Pooling, Local Response Normalization (LRN), im2col等层. 1.Convolution层: 就是卷积层,是卷积神经网络(CNN)的核心层. 层类型:Convolution lr_mult: 学习率

Caffe学习系列(16):各层权值参数可视化

通过前面的学习,我们已经能够正常训练各种model了.我们训练cifar10数据,迭代10000次,然后将训练好的 model保存起来,名称为my_iter_10000.caffemodel,然后使用jupyter notebook 来进行可视化. 首先,导入必要的库 In [1]: import numpy as np import matplotlib.pyplot as plt import os,sys,caffe %matplotlib inline In [2]: caffe_roo

转 Caffe学习系列(4):激活层(Activiation Layers)及参数

在激活层中,对输入数据进行激活操作(实际上就是一种函数变换),是逐元素进行运算的.从bottom得到一个blob数据输入,运算后,从top输入一个blob数据.在运算过程中,没有改变数据的大小,即输入和输出的数据大小是相等的. 输入:n*c*h*w 输出:n*c*h*w 常用的激活函数有sigmoid, tanh,relu等,下面分别介绍. 1.Sigmoid 对每个输入数据,利用sigmoid函数执行操作.这种层设置比较简单,没有额外的参数. 层类型:Sigmoid 示例: layer { n

Caffe 学习系列

学习列表: Google protocol buffer在windows下的编译 caffe windows 学习第一步:编译和安装(vs2012+win 64) caffe windows学习:第一个测试程序 Caffe学习系列(1):安装配置ubuntu14.04+cuda7.5+caffe+cudnn Caffe学习系列(2):数据层及参数 Caffe学习系列(3):视觉层(Vision Layers)及参数 Caffe学习系列(4):激活层(Activiation Layers)及参数

Caffe学习系列——工具篇:神经网络模型结构可视化

Caffe学习系列--工具篇:神经网络模型结构可视化 在Caffe中,目前有两种可视化prototxt格式网络结构的方法: 使用Netscope在线可视化 使用Caffe提供的draw_net.py 本文将就这两种方法加以介绍 1. Netscope:支持Caffe的神经网络结构在线可视化工具 Netscope是个支持prototxt格式描述的神经网络结构的在线可视工具,网址:  http://ethereon.github.io/netscope/quickstart.html  它可以用来可

转 Caffe学习系列(5):其它常用层及参数

本文讲解一些其它的常用层,包括:softmax_loss层,Inner Product层,accuracy层,reshape层和dropout层及其它们的参数配置. 1.softmax-loss softmax-loss层和softmax层计算大致是相同的.softmax是一个分类器,计算的是类别的概率(Likelihood),是Logistic Regression 的一种推广.Logistic Regression 只能用于二分类,而softmax可以用于多分类. softmax与softm

【转】Caffe初试(七)其它常用层及参数

本文讲解一些其它的常用层,包括:softmax-loss层,Inner Product层,accuracy层,reshape层和dropout层及它们的参数配置. 1.softmax-loss softmax-loss层和softmax层计算大致是相同的.softmax是一个分类器,计算的是类别的概率(Likelihood),是Logistic Regression的一种推广. Logistic Regression只能用于二分类,而softmax可以用于多分类. softmax与softmax