Caffe 专题二各层的含义

Caffe 专题二各层的含义

caffe 各层的详解

	caffe 网络配置文件中有prototx 和 solver 文件、其中prototxt 文件定义了网络模型结构、solver 文件定义了网络的超参数。

prototxt 中的数据层详解

数据层是每一个模型的起始层或者底层、通过数据层完成blobs 格式数据的上传、在数据层的某些参数可以实现数据的预处理(减去均值,放大缩小,剪裁,镜像等)
训练时的数据输入层:
		name: "LeNet"
		layer {
			name: "mnist"	# 对该层的命名
			type: "Data"	# 对该层的类型定义
			top: "data"	# bottom 代表输入数据、top 代表输出的数据、可以有多个bottom 和top
			top: "label"
			include {
				phase: TRAIN	# 此网络层在训练阶段使用
			}
			transform_param {
				scale: 0.00390625	# 将数据进行缩放,实际其值为1/255,即将输入数据由0-255规划到0-1之间
				mean_file_size: mean.binaryproto	# 将数据进行均值化,使用的是caffe 框架自带的均值化操作
				mirror: 1	# 其值可以是1 或 0,代表开启和关闭镜像
				crop_size: 227	# 表示以227*227进行裁剪
			}
			data_param {
				source: "examples/mnist/mnist_train_lmdb"	# 读取训练数据
				batch_size: 64	# 训练时的batch 大小,即批量处理数
				backend: LMDB	# 训练的数据格式,数据格式有LevelDB、LMDB 和hfd5 格式
			}
		}
测试时的数据输入层:
		layer {
			name: "mnist"	# 对该层的命名
			type: "Data"	# 对该层的类型定义
			top: "data"	# bottom 代表输入数据、top 代表输出的数据、可以有多个bottom 和top
			top: "label"
			include {
				phase: TEST	# 此层在测试阶段使用
			}
			transform_param {
				scale: 0.00390625	# 将数据进行缩放,实际其值为1/255,即将输入数据由0-255规划到0-1之间
			}
			data_param {
				source: "examples/mnist/mnist_test_lmdb"	# 读取训练数据
				batch_size: 100	# 训练时的batch 大小,即批量处理数
				backend: LMDB	# 训练的数据格式,数据格式有LevelDB、LMDB 和hfd5 格式
			}
		}
维度变换层:
		layer {
			name: "reshape"	# 对该层的命名
			type: "Reshape"	# 不改变输入的数据值得大小,仅改变维度
			bottom: "input"
			top: "output"
			reshape_param {
				shape { # 0:表示维度不变,即输入维度和输出维度的相等
					dim: 0
					dim: 0
					dim: 0
					dim: -1 #  -1 为自己推断
				}
			}
		}
eg: 假设原数据为 32*3*28*28, 表示32张3通道的28*28的彩色图片
shape {
	dim:0
	dim:0
	dim:14
	dim:-1
}
其输出为: 32*32*14*56
卷积层:
		layer {
			name: "conv1"
			type: "Convolution"
			bottom: "data"
			top: "conv1"
			param {
				lr_mult: 1	# 网络权值学习率的系数,最终的学习率=solver 文件中的基础学习率base_lr * lr_mult
				decay_mult: 1	# 权值衰减
			}
			param {
				lr_mult: 2	# 偏置项学习率的系数,一般是权值系数的2倍
				decay_mult: 0
			}
			convolution_param {
				num_output: 20
				pad: 2
				kernel_size: 5
				stride: 1
				weight_filler {
					type: "xavier"	# 对权值进行初始化,默认为"constant", 即值全为0。还有“xavier”算法和“gaussian”算法,但一般使用“xavier”算法比较多,保证输出和输入尽可能地服从相同的概率分布,即均匀化分布
				}
				bias_filler {
					type: "constant"	# 偏置项的初始化,一般是"constant"
				}
			
			}
		}
池化层:
		layer {
			name: "pool1"
			type: "Pooling"
			bottom: "conv1"
			top: "pool1"
			pooling_param {
				pool: MAX	# 设置为最大池化,可选方法还有平均池化和最小池化等
				kernel_size: 2	# 设置池化尺寸的大小
				stride: 2	# 设置池化的步长
			}
		}
LRN层:
对输入的局部区域进行归一化,达到"侧抑制"的效果。对于输入除以一个归一化公式,这个最早是Alexnet 提出的现在用的少。
		layer {
			name: "norm1"
			type: "LRN"
			bottom: "pool1"
			top: "norm1"
			lrn_param {
				local_size: 3	# 默认是5。如果是跨通道LRN,则表示求和的通道数;如果是通道内LRN,则表示求和的正方形区域长度。
				alpha: 5e-05	# 默认是1,归一化公式中参数
				beta: 0.75	# 默认是5,归一化公式中参数
				norm_region: WITHIN_CHANNEL	# 默认为ACROSS_CHANNELS, ACROSS_CHANNELS 表示在相邻的通道间求和归一化,WITHIN——CHANNEL 表示在一个通道内部特定的区域内进行求和归一化
			}
		}
全连接层:
类似卷积层,只是它的卷积核大小和原数据大小一致。因此它的参数基本和卷积层的参数一样。
		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"
				}
			}
		}
激活函数层:
		layer {
			name: "relu1"
			type: "ReLU" 	#将激活函数设置为ReLU,还可以是Sigmoid等
			bottom: "ip1"
			top: "ip1"
		}
dropout层:
用来防止过拟合,一般在全连接层后。
		layer {
			name: "drop6"
			type: "Dropout"
			bottom: "ip1" #输出和输入为同一层
			top: "ip1"
			dropout_param {
				dropout_ratio: 0.5	#让网络某些隐藏层节点的权重随机失活,其值为0.5即每个节点权重有50%的概率失活
			}
		}
BN层(BatchNormal):
批量归一化或者正则化,使其不依赖初始值,加快训练速度。
		layer {
			name: "batchnorm"
			type: "BatchNorm"
			bottom: "conv"
			top: "conv"
			batch_norm_param {
				use_global_stats: true
			}
			include {
				phase: TRAIN/TEST
			}
		}
计算精度层:
计算准确率,一般在测试阶段使用。
		layer {
			name: "accuracy"
			type: "Accuracy"
			bottom: "ip2"
			bottom: "label"
			top: "accuracy"
			include {
				phase: TEST
			}
		}
计算loss层:
计算损失,输出loss值。
		layer {
			name: "loss"
			type: "SoftmaxWithLoss"
			bottom: "ip2"
			bottom: "label"
			top: "loss"
		}
softmax层:
输出概率值。
		layer {
			name: "prob"
			type: "Softmax"
			bottom: "fc8-conv"
			top: "prob"
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值