由于神经网络中有不同的层结构,不同类型的层又有不同的参数,所有就根据Caffe官网的说明文档做了一个简单的总结。

1. Vision Layers

1.1 卷积层(Convolution)

类型:CONVOLUTION

例子

layers {  name: "conv1"  type: CONVOLUTION  bottom: "data"  top: "conv1"  blobs_lr: 1          # learning rate multiplier for the filters  blobs_lr: 2          # learning rate multiplier for the biases  weight_decay: 1      # weight decay multiplier for the filters  weight_decay: 0      # weight decay multiplier for the biases  convolution_param {    num_output: 96     # learn 96 filters    kernel_size: 11    # each filter is 11x11    stride: 4          # step 4 pixels between each filter application    weight_filler {      type: "gaussian" # initialize the filters from a Gaussian      std: 0.01        # distribution with stdev 0.01 (default mean: 0)    }    bias_filler {      type: "constant" # initialize the biases to zero (0)      value: 0    }  }}

blobs_lr: 学习率调整的参数,在上面的例子中设置权重学习率和运行中求解器给出的学习率一样,同时是偏置学习率为权重的两倍。

weight_decay:

卷积层的重要参数

必须参数:

num_output (c_o):过滤器的个数

kernel_size (or kernel_h and kernel_w):过滤器的大小

可选参数:

weight_filler [default type: 'constant' value: 0]:参数的初始化方法

bias_filler:偏置的初始化方法

bias_term [default true]:指定是否是否开启偏置项

pad (or pad_h and pad_w) [default 0]:指定在输入的每一边加上多少个像素

stride (or stride_h and stride_w) [default 1]:指定过滤器的步长

group (g) [default 1]: If g > 1, we restrict the connectivityof each filter to a subset of the input. Specifically, the input and outputchannels are separated into g groups, and the ith output group channels will beonly connected to the ith input group channels.

通过卷积后的大小变化:

输入:n * c_i * h_i * w_i

输出:n * c_o * h_o * w_o,其中h_o = (h_i + 2 * pad_h - kernel_h) /stride_h + 1,w_o通过同样的方法计算。

1.2 池化层(Pooling)

类型:POOLING

例子

layers {  name: "pool1"  type: POOLING  bottom: "conv1"  top: "pool1"  pooling_param {    pool: MAX    kernel_size: 3 # pool over a 3x3 region    stride: 2      # step two pixels (in the bottom blob) between pooling regions  }}

卷积层的重要参数

必需参数:

kernel_size (or kernel_h and kernel_w):过滤器的大小

可选参数:

pool [default MAX]:pooling的方法,目前有MAX, AVE, 和STOCHASTIC三种方法

pad (or pad_h and pad_w) [default 0]:指定在输入的每一遍加上多少个像素

stride (or stride_h and stride_w) [default1]:指定过滤器的步长

通过池化后的大小变化:

输入:n * c_i * h_i * w_i

输出:n * c_o * h_o * w_o,其中h_o = (h_i + 2 * pad_h - kernel_h) /stride_h + 1,w_o通过同样的方法计算。

1.3 Local Response Normalization (LRN)

类型:LRN

Local ResponseNormalization是对一个局部的输入区域进行的归一化(激活a被加一个归一化权重(分母部分)生成了新的激活b),有两种不同的形式,一种的输入区域为相邻的channels(cross channel LRN),另一种是为同一个channel内的空间区域(within channel LRN)

计算公式:对每一个输入除以

可选参数:

local_size [default 5]:对于cross channel LRN为需要求和的邻近channel的数量;对于within channel LRN为需要求和的空间区域的边长

alpha [default 1]:scaling参数

beta [default 5]:指数

norm_region [default ACROSS_CHANNELS]: 选择哪种LRN的方法ACROSS_CHANNELS 或者WITHIN_CHANNEL

2. Loss Layers

深度学习是通过最小化输出和目标的Loss来驱动学习。

2.1 Softmax

类型: SOFTMAX_LOSS

2.2 Sum-of-Squares / Euclidean

类型: EUCLIDEAN_LOSS

2.3 Hinge / Margin

类型: HINGE_LOSS

例子:

# L1 Normlayers {  name: "loss"  type: HINGE_LOSS  bottom: "pred"  bottom: "label"}# L2 Normlayers {  name: "loss"  type: HINGE_LOSS  bottom: "pred"  bottom: "label"  top: "loss"  hinge_loss_param {    norm: L2  }}

可选参数:

norm [default L1]: 选择L1或者 L2范数

输入:

n * c * h * wPredictions

n * 1 * 1 * 1Labels

输出

1 * 1 * 1 * 1Computed Loss

2.4 Sigmoid Cross-Entropy

类型:SIGMOID_CROSS_ENTROPY_LOSS

2.5 Infogain

类型:INFOGAIN_LOSS

2.6 Accuracy and Top-k

类型:ACCURACY 
用来计算输出和目标的正确率,事实上这不是一个loss,而且没有backward这一步。

3. 激励层(Activation / Neuron Layers)

一般来说,激励层是element-wise的操作,输入和输出的大小相同,一般情况下就是一个非线性函数。

3.1 ReLU / Rectified-Linear and Leaky-ReLU

类型: RELU

例子:

layers {  name: "relu1"  type: RELU  bottom: "conv1"  top: "conv1"}

可选参数:

negative_slope [default 0]:指定输入值小于零时的输出。

ReLU是目前使用做多的激励函数,主要因为其收敛更快,并且能保持同样效果。

标准的ReLU函数为max(x, 0),而一般为当x > 0时输出x,但x <= 0时输出negative_slope。RELU层支持in-place计算,这意味着bottom的输出和输入相同以避免内存的消耗。

3.2 Sigmoid

类型: SIGMOID

例子:

layers {  name: "encode1neuron"  bottom: "encode1"  top: "encode1neuron"  type: SIGMOID}

SIGMOID 层通过 sigmoid(x) 计算每一个输入x的输出,函数如下图。

3.3 TanH / Hyperbolic Tangent

类型: TANH

例子:

layers {  name: "encode1neuron"  bottom: "encode1"  top: "encode1neuron"  type: SIGMOID}

TANH层通过 tanh(x) 计算每一个输入x的输出,函数如下图。

3.3 Absolute Value

类型: ABSVAL

例子:

layers {  name: "layer"  bottom: "in"  top: "out"  type: ABSVAL}

ABSVAL层通过 abs(x) 计算每一个输入x的输出。

3.4 Power

类型: POWER

例子:

layers {  name: "layer"  bottom: "in"  top: "out"  type: POWER  power_param {    power: 1    scale: 1    shift: 0  }}

可选参数:
power [default 1]
scale [default 1]
shift [default 0]

POWER层通过 (shift + scale * x) ^ power计算每一个输入x的输出。

3.5 BNLL

类型: BNLL

例子:

layers {  name: "layer"  bottom: "in"  top: "out"  type: BNLL}

BNLL (binomial normal log likelihood) 层通过 log(1 + exp(x)) 计算每一个输入x的输出。

4. 数据层(Data Layers)

数据通过数据层进入Caffe,数据层在整个网络的底部。数据可以来自高效的数据库(LevelDB 或者 LMDB),直接来自内存。如果不追求高效性,可以以HDF5或者一般图像的格式从硬盘读取数据。

4.1 Database

类型:DATA

必须参数:

source:包含数据的目录名称

batch_size:一次处理的输入的数量

可选参数:

rand_skip:在开始的时候从输入中跳过这个数值,这在异步随机梯度下降(SGD)的时候非常有用

backend [default LEVELDB]: 选择使用 LEVELDB 或者 LMDB

4.2 In-Memory

类型: MEMORY_DATA
必需参数:
batch_size, channels, height, width: 指定从内存读取数据的大小
The memory data layer reads data directly from memory, without copying it. In order to use it, one must call MemoryDataLayer::Reset (from C++) or Net.set_input_arrays (from Python) in order to specify a source of contiguous data (as 4D row major array), which is read one batch-sized chunk at a time.

4.3 HDF5 Input

类型: HDF5_DATA
必要参数:
source:需要读取的文件名

batch_size:一次处理的输入的数量

4.4 HDF5 Output

类型: HDF5_OUTPUT
必要参数:
file_name: 输出的文件名

HDF5的作用和这节中的其他的层不一样,它是把输入的blobs写到硬盘

4.5 Images

类型: IMAGE_DATA
必要参数:
source: text文件的名字,每一行给出一张图片的文件名和label
batch_size: 一个batch中图片的数量
可选参数:
rand_skip:在开始的时候从输入中跳过这个数值,这在异步随机梯度下降(SGD)的时候非常有用
shuffle [default false]

new_height, new_width: 把所有的图像resize到这个大小

4.6 Windows

类型:WINDOW_DATA

4.7 Dummy

类型:DUMMY_DATA

Dummy 层用于development 和debugging。具体参数DummyDataParameter。

5. 一般层(Common Layers)

5.1 全连接层Inner Product

类型:INNER_PRODUCT
例子:

layers {  name: "fc8"  type: INNER_PRODUCT  blobs_lr: 1          # learning rate multiplier for the filters  blobs_lr: 2          # learning rate multiplier for the biases  weight_decay: 1      # weight decay multiplier for the filters  weight_decay: 0      # weight decay multiplier for the biases  inner_product_param {    num_output: 1000    weight_filler {      type: "gaussian"      std: 0.01    }    bias_filler {      type: "constant"      value: 0    }  }  bottom: "fc7"  top: "fc8"}

必要参数:

num_output (c_o):过滤器的个数

可选参数:

weight_filler [default type: 'constant' value: 0]:参数的初始化方法

bias_filler:偏置的初始化方法

bias_term [default true]:指定是否是否开启偏置项

通过全连接层后的大小变化:

输入:n * c_i * h_i * w_i

输出:n * c_o * 1 *1

5.2 Splitting

类型:SPLIT
Splitting层可以把一个输入blob分离成多个输出blobs。这个用在当需要把一个blob输入到多个输出层的时候。

5.3 Flattening

类型:FLATTEN
Flattening是把一个输入的大小为n * c * h * w变成一个简单的向量,其大小为 n * (c*h*w) * 1 * 1。

5.4 Concatenation

类型:CONCAT

例子:

layers {  name: "concat"  bottom: "in1"  bottom: "in2"  top: "out"  type: CONCAT  concat_param {    concat_dim: 1  }}

可选参数:

concat_dim [default 1]:0代表链接num,1代表链接channels

通过全连接层后的大小变化:

输入:从1到K的每一个blob的大小n_i * c_i * h * w

输出:

如果concat_dim = 0: (n_1 + n_2 + ... + n_K) *c_1 * h * w,需要保证所有输入的c_i 相同。

如果concat_dim = 1: n_1 * (c_1 + c_2 + ... +c_K) * h * w,需要保证所有输入的n_i 相同。

通过Concatenation层,可以把多个的blobs链接成一个blob。

5.5 Slicing

The SLICE layer is a utility layer that slices an input layer to multiple output layers along a given dimension (currently num or channel only) with given slice indices.

5.6 Elementwise Operations

类型:ELTWISE

5.7 Argmax

类型:ARGMAX

5.8 Softmax

类型:SOFTMAX

5.9 Mean-Variance Normalization

类型:MVN

6. 参考

Caffe

卷积神经网络参数说明相关推荐

  1. 卷积神经网络(CNN,ConvNet)

    卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...

  2. DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43225445 DeepLearning tutorial(4)CNN卷积神经网络原理简介 ...

  3. 【theano-windows】学习笔记十二——卷积神经网络

    前言 按照进度, 学习theano中的卷积操作 国际惯例, 来一波参考网址 Convolutional Neural Networks (LeNet) 卷积神经网络如何应用在彩色图像上? 卷积小知识 ...

  4. (pytorch-深度学习系列)使用Pytorch实现小型卷积神经网络网络

    卷积层 卷积神经网络中每层卷积层(Convolutional layer)由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法最佳化得到的.卷积运算的目的是提取输入的不同特征,第一层卷积层可能只 ...

  5. 深度学习之卷积神经网络CNN

    转自:https://blog.csdn.net/cxmscb/article/details/71023576 一.CNN的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连 ...

  6. 卷积神经网络的形象理解

    一.CNN的局部感受野.共享权重和池化 学了很久的卷积神经网络,看了关于它的tutorial,也看没有明白它(convnet 中的卷积层)到底要做什么?说它再做特征提取,怎么看不出来提取的是什么特征? ...

  7. caffe与卷积神经网络

    date:2017.9-2018.4 purpose:毕设 1caffe 简介 Caffe框架主要有五个组件:Blob,Solver,Net,Layer,Proto, 模型定义在.prototxt文件 ...

  8. 莫烦pytorch CNN卷积神经网络

    不了解卷积神经网络的,看这篇: 一文教你读懂pytorch+CNN 莫烦pytorch 什么是卷积神经网络CNN(Convlutinoal Neural Network) 我们了解了卷积神经网络之后, ...

  9. 机器学习之卷积神经网络--CNN介绍

    卷积神经网络–CNN 1. 卷积神经网络介绍 卷积神经网络(Convolutional Neural Networks,CNN)是一种包 含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之 ...

  10. 基于卷积神经网络故障诊断模型的 t-SNE特征可视化

    基于卷积神经网络故障诊断模型的 t-SNE特征可视化 1. t-sne可视化基本概念 2. sklearn.manifold.TSNE函数的参数说明 3. 基于tensorflow2卷积网络t-SNE ...

最新文章

  1. laravel homestead环境默认账号密码
  2. 错误:You can't specify target table 'xxx' for update in FROM clause的解决
  3. MS SQL Server查询优化方法
  4. Onekey Ghost找不到硬盘分区怎么办
  5. Android启动过程以及各个镜像的关系
  6. 网易云信联手长沙银行,远程视频银行系统助力数字化转型
  7. 百度数据可视化图表套件echart实战
  8. Effective Java之使可变性最小(十五)
  9. OpenJudge NOI 1.5 37:雇佣兵
  10. iPhone 12系列又有新变化:免费的有线耳机可能不再有
  11. 前端基础:JavaScript 代码风格指南
  12. imread读不到图片_家用水表怎么读?超强实用技能快速get
  13. c语言通讯录整体设计论文,通讯录管理系统的设计与实现
  14. 酒店客房管理系统JAVA-SSM-MYSQL
  15. 2022重庆大学877软件工程考研经验贴
  16. android 出错信息为:Class 'Anonymous class derived from Handler' must either be declared abstract or imple
  17. 一次蜿蜒曲折的RFID破解之路
  18. 完美解决Win11无法启动安全中心
  19. PX4以往固件版本下载
  20. 制造企业生产排产现状和APS系统的解决方案

热门文章

  1. Ajax与Comet
  2. JavaWeb01-HTML篇笔记(一)
  3. Clean-Code: 有意义的名字
  4. 中国高铁走向全球,一个行业标准帮了大忙
  5. 《树莓派Python编程入门与实战(第2版)》——2.2 使用Raspbian命令行
  6. 为什么会找不到D层文件?
  7. WebApp那些事——(JqueryMobile) 实战(一)
  8. Sublime Text3 插件集合
  9. linux 多个文件中查找字符串
  10. 采用AOP 的观点来 Log 所有方法的调用