问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

如何在Caffe中配置每一个层的结构

发布网友 发布时间:2022-03-27 13:50

我来回答

1个回答

热心网友 时间:2022-03-27 15:19

如何在Caffe中配置每一个层的结构

最近刚在电脑上装好Caffe,由于神经网络中有不同的层结构,不同类型的层又有不同的参数,所有就根据Caffe的说明文档做了一个简单的总结。


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 Norm

layers {

name: "loss"

type: HINGE_LOSS

bottom: "pred"

bottom: "label"

}


# L2 Norm

layers {

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 Proct

类型: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_proct_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

深度学习 caffe flatten层怎么配置

1.1卷积层(Convolution)类型:CONVOLUTION例子layers{name:"conv1"type:CONVOLUTIONbottom:"data"top:"conv1"blobs_lr:1#learningratemultiplierforthefiltersblobs_lr:2#learningratemultiplierforthebiasesweight_decay:1#weightdecaymultiplierforthefiltersweight_decay:0#weightdecaymultiplierforthebiasesconvolut...

非结构化数据如何可视化呈现?

通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准...

如何在在caffe的lenet-5模型中增加一层卷积层和池化层

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 。

如何在caffe中添加新的Layer

1、属于哪个类型的layer,就打开哪个hpp文件,这里就打开vision_layers.hpp,然后自己添加该layer的定义,或者直接复制Convolution_Layer的相关代码来修改类名和构造函数名都改为Aaa_Layer,如果不用GPU,将*_gpu的声明都去掉。2、实现自己的layer,编写Aaa_Layer.cpp,加入到src/caffe/layers,主要实现Setup...

caffe 中的top 和bottom是什么意思

caffe中的数据是用blobs的形式进行数据流动的,每一层用bottom来输入数据,用top来输出数据。如果只有top没有bottom,则此层只有输出,没有输入。反之亦然。如果有多个 top或多个bottom,表示有多个blobs数据的输入和输出。

caffe代码框架分析

Layer的构建则依赖于layer_factory,通过LayerParameter构建出各种复杂的层结构。Blob,作为数据的核心载体,存储着层间的数据流转,包括输入和输出,通过Forward接口实现高效的推理过程。前处理如颜色转换、后处理如标准化和Argmax等操作,都在Blob的生命周期内完成。数据存储在Caffe中采用了分离结构,将形状和...

caffe 中为什么bn层要和scale层一起使用

一,在Caffe中使用Batch Normalization需要注意以下两点:1. 要配合Scale层一起使用。2. 训练的时候,将BN层的use_global_stats设置为false,然后测试的时候将use_global_stats设置为true。二,基本公式梳理:Scale层主要完成 top=alpha∗bottom+betatop=alpha∗bottom+beta的过程,则层中主要...

如何写自己的数据层

想写自己的层,首先必须得在caffe.proto中定义自己层的参数,以便于在proto配置文件中对参数进行配置啦什么的.其次你还要在caffe.proto声明你的层的参数是可选的,然后你得在caffe的include目录下添加你自己层的hpp头文件,以及在caffe的src下的layer目录下添加你自己的cpp实现文件。按F3之后在左边会出现...

深度学习caffe的代码怎么读

先说个大概,知道了神经网络的结构,forward跟backward是怎样的一个过程,基本上就知道了caffe的结构了。按照神经网络的运行过程看Caffe就好了。既然说神经网络,那么就得有一个网络出来,caffe里面就用Net这个类来记录这个网络。那么网络是由很多个layer构成,自然而然就会有Layer这个类,为了统一管理这些类...

NCNN使用总结

第一层输出是 concat_out1 ,第二层输出也是 concat_out1 ,当使用 ncnn.extract 会出现错误!!!这貌似是算作 caffe 的问题,在笔者使用的过程忽略了这一点,干脆算 NCNN 操作里面了。Batch Normalization 层有个 use_global_stats 参数,这个操作的作用是: 是否使用caffe内部的均值和方差 换句...

咖啡中的拿铁有什么含义

制作过程简单,只需在新鲜制作的Espresso中缓缓倒入接近沸腾的牛奶,调和成个人所喜的浓度。如果在热牛奶上再加一层冷牛奶泡沫,就变成了星巴克特色的美式拿铁,底部是浓缩咖啡,中层是65-75℃的热牛奶,最上面则是薄薄的冷牛奶泡沫。若不加热牛奶,而是在Espresso上点缀两大勺牛奶泡沫,就形成了意大利人所...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
几何e值得买吗 我英语80分左右总是上不去(100分满分)怎么办... 刚绣好的十字绣怎么洗?画过格的 台州温岭第一人民医院有儿科吗 北山职业技术学校有哪些专业? 在温岭市找一份夜里兼职的驶机工作我现白天在厂里开车,想多收入,找... ...网线连接了客厅的路由器再连接到电脑上,卧室用的是和客厅路由器分... ...器放在客厅看电视用,卧室里面我还得再牵一根网线怎么办? ...台式 路由器在客厅距离太远拉网线不方便 卧室里有网线插口 卧室的网 ... 在临海社保缴费了一年后离开没办转移,去宁波参加社保 后又回临海参加社... 如何评价ILSVRC 2015 结果 前馈神经网络、BP神经网络、卷积神经网络的区别与联系 外企 fcn 是什么职位 如何更好的理解分析深度卷积神经网络 画出一个典型chn网络结构图,并描述各部分的作用 什么是全连接神经网络?怎么理解“全连接”? 深度学习之卷积神经网络经典模型 卷积神经网络用全连接层的参数是怎么确定的? 神经网络最后一层怎么把特征变成一个值 为什么要两层全连接层 卷积神经网络为什么最后接一个全连接层 小米8麦克风进了一点水有没有问题? 想问下1加6和小米8买哪个好 揭秘,小米手机为什么不防水 小米8青春版可以把摄像头伸到水里吗 小米8 为什么没有介绍防水,电池和无线充电 小米手机防水吗 小米8se手机掉水里吹干放入米里一晚上摄像头没有雾气,是干了吗?现在不敢开机 我的小米8手机带壳掉进水里了怎么办,手机防水不 雨天小米8掉地上水里,该怎么办为好 ps中的图层链接有什么作用 如何通过Python进行深度学习? 如何用caffe解决回归问题 简述数据链路层和网络层的作用? 网络的七层各自的作用是什么?要简单的解释,有例子最好 怎么在Caffe中配置每一个层的结构 数据链路层的主要功能 微信视频通话时为什么是倒着的 为什么微信发视频是倒着的? 华为手机微信视频怎么是反的 为什么手机微信视频聊天人会倒过来? 为什么微信和别人视频聊天时自己是上下颠倒的(就像倒立着)? 平板电脑上微信视频聊天前摄像头人怎么是倒过来的怎么办_问一问 微信的视频影像是倒着的 为什么在平板手机上微信的视频聊天图像是倒着的 苹果13promax镜头是什么牌子 iphone4的摄像头是哪家厂商生产的 苹果12摄像头是索尼什么型号 苹果se2的摄像头有那些厂家的 我听说苹果手机用的是索尼的摄像头,真的吗
  • 焦点

最新推荐

猜你喜欢

热门推荐