[caffe]网络各层参数设置
数据层
数据层是模型最底层,提供提供数据输入和数据从Blobs转换成别的格式进行保存输出,通常数据预处理(减去均值,放大缩小,裁剪和镜像等)也在这一层设置参数实现.
参数设置:
- name: 名称
- type: 类型
- Data: 从LMDB/LEVELDB读取数据和标签, 转换(http://deepdish.io/2015/04/28/creating-lmdb-in-python/) 可以使用convert_imageset转换
- ImageData: 直接读取图片数据
- ....
- top: 输出数据(和下一层的bottom一样)
- bottom: 输入数据()
- include: 一般训练和测试的时候,模型层不一样,由include指定在哪一层出现, TRIAN/TEST
- transform_params: 数据预处理
- source: 数据位置
- backend
- batchsize: 设置batch的大小
data_params: 数据参数
例如,caffe中自带的mnist example
layer {
name: "mnist" #名称
type: "Data" #输入的是LMDB数据,前面的create_mnist.sh做了转换
include: TRIAN #只在训练的时候才包括(测试没有label)
transform_param {
scale: 0.00390625 #缩放参数
}
data_param {
source: "examples/mnist/mnist_train_lmdb" #数据来源是在当前文件夹中的 mnist_train_lmdb中
backend: LMDB
batch_size: 64 #batch的大小
}
top: "data" #第一层输出data和label, 无bottom
top: "label" #
}
--------------------------------------------------------------------------------------------------------------------------------------------------
convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
前面我们提到数据层中Data类型输入是LMDB/LEVELDB数据,而我们有的经常是原始图片数据,而且有可能原始图片的大小还不一致,我们需要将其转换为格式一致的可输入数据,caffe中的convert_imageset 为我们提供了这样的工具。
FLAGS:图片组参数
- -gray: 是否以灰度图的方式打开图片,程序调用opencv库中的imread()函数来打开图片,默认为false
- -shuffle: 是否随机打乱图片顺序,默认为false
- -backend: 需要转换成db文件格式,可选为leveldb或lmdb默认为lmdb
- -resize_width/resize_height: 改变图片大小,需要的时候可以使得图片大小一致,程序调用opencv的resize()函数来对图片进行缩放,默认为0,不变
- -check_size: 检查所有的数据是否有相同的尺寸,默认为false, 不检查
- -encoded: 是否将原图片的编码放入最终的数据,默认为false
- -encoded_type: 与前一个参数对应,将图片编码为一个格式
ROOTFOLDER: 图片存放的绝对路径,从linux系统根目录开始
LISTFILE: 图片文件列表清单,一般为一个txt文件,一行一张图片及其类别标签
DB_NAME: 最终生成的db文件存放目录
例如:
#!/usr/bin/env sh
DATA=examples/images/cropimage/ #路径变量
rm -rf $DATA/img_train_lmdb #如果文件存在,先删除再重新创建
build/tools/convert_imageset --shuffle --gray --check_size=true /home/vicent/caffe/examples/images/cropimage/ $DATA/batchfile.txt $DATA/img_train_lmdb #乱序,转换为灰度,检查大小是否一致
--------------------------------------------------------------------------------------------------------------------------------------------------
视觉层
卷积层
卷积的目的是提取feature
- name: 名称
- type: 层类型
- bottom: 输入
- top: 输出
- lr_mt: 学习率速率, 最终学习率是这个数乘以solver.prototxt 配置文件中的base_lr; 如果有两个lr_mt一个表示偏置学习率,一个表示权值学习率
- num_outputs: filter的个数
- kernel_size: 卷积核大小
- stride: 步长
- pad: 边缘扩充
- weight_filler: 权值初始化, 默认为constant, 值全为0,经常用xavier, 也可设置为gaussian
- bias_filler: 偏置初始化方法, 一般偏置初始化方法可以不设置
例如:
layer {
name: "conv1" #名称
type: "Convolution" #层类型
bottom: "data" #上一层输入数据
top: "conv1" #这一层输出数据
param {
lr_mult: 1 #权重学习率速率
}
param {
lr_mult: 2 #偏置学习率速率
}
convolution_param {
num_output: 20 #filter的个数
kernel_size: 5 #卷积核的大小
stride: 1
weight_filler {
type: "xavier" #权重初始化方法
}
bias_filler {
type: "constant" #偏置初始化方法
}
}
}
池化层
减少数据量和数据维度
- kernel_size:池化核大小
- pool: 池化方法, max, ave, stochastic
- pad:
- stride
Normalization
[caffe]网络各层参数设置的更多相关文章
- caffe 网络参数设置
weight_decay防止过拟合的参数,使用方式: 样本越多,该值越小 模型参数越多,该值越大 一般建议值: weight_decay: 0.0005 lr_mult, decay_mult 关于偏 ...
- caffe fine tune 复制预训练model的参数和freeze指定层参数
复制预训练model的参数,只需要重新copy一个train_val.prototxt.然后把不需要复制的层的名字改一下,如(fc7 -> fc7_new),然后fine tune即可. fre ...
- c++ caffe 输出 activation map 、 层参数
python输出activation map与层参数:https://blog.csdn.net/tina_ttl/article/details/51033660 caffe::Net文档: htt ...
- Caffe的Solver参数设置
Caffe的solver参数设置 http://caffe.berkeleyvision.org/tutorial/solver.html solver是通过协调前向-反向传播的参数更新来控制参数优化 ...
- caffe(2) 数据层及参数
要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成.所有的参数都定义在caffe.proto这个文件 ...
- (原)torch中微调某层参数
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6221664.html 参考网址: https://github.com/torch/nn/issues ...
- caffe的cancat层
我在训练Goolenet inception-v3时候出现了concat错误,因此写下concat层的一些知识点,以供读者跳坑 concat层在inception-v3网络中存在非常明显,之所以需要c ...
- 【转载】 Caffe BN+Scale层和Pytorch BN层的对比
原文地址: https://blog.csdn.net/elysion122/article/details/79628587 ------------------------------------ ...
- C3p0的参数设置
C3p0的参数设置:ComboPooledDataSource和BasicDataSource一样提供了一个用于关闭数据源的close()方法,这样我们就可以保证Spring容器关闭时数据源能够成功释 ...
随机推荐
- Codeforces 789A Anastasia and pebbles( 水 )
链接:传送门 题意:这个人每次都去公园捡石子,她有两个口袋,每个口袋最多装 k 个石子,公园有 n 种石子,每种石子 w[i] 个,询问最少几天能将石子全部捡完 思路:排个序,尽量每天都多装,如果 k ...
- Linux初级命令总结
第1节 查看当前系统版本及内核 cat /etc/redhat-release (查看系统版本) CentOS Linux release 7.4.1708 (Core) uname -r (查看系统 ...
- 《黑白团团队》第八次团队作业:Alpha冲刺 第二天
项目 内容 作业课程地址 任课教师首页链接 作业要求 团队项目 填写团队名称 黑白团团队 填写具体目标 认真负责,完成项目 团队项目Github仓库地址链接. 第二天 日期:2019/6/16 成员 ...
- CAD教程-AL对其命令
AL可以实现不规则的对其功能 1.第一步按下AL,按下Enter 2.选择第一个源点 3.选择第一个目标点 4.选择第二个源点 5.选择第二个目标点 6.按下Enter,完成移位
- Oracle里schema理解
在Oracle中,一个用户就是一个Schema,表都是建立在Schema中的,也可以理解为每个用户拥有不同的表.一个用户想访问另外一个用户,也就是另外一个schema的表的时候,可以用 usernam ...
- [jQuery]ajax同步请求在方法内问题
在函数内写$.ajax() 的成功函数中return 的值,并没有return到外层方法返回至
- HDU 4454
想了很久,发现其实就只需要三分枚举圆上的点,到矩形的最短很容易就可以求到了.开始时考虑要不要根据矩形相对圆的方位来划分枚举区间,后来发现一定不能这样做的. 注意题目给的是矩形的对角形,但没说哪一条对角 ...
- Struts2概述及与Struts1的对照
Struts2 概述 1,仍然是一个基于请求响应的MVC框架 2,Struts2不是Struts1的升级 3,Struts2与Struts1的体系结构差距非常大 4,Struts2採用了还有一个MVC ...
- C9---include,编译
//main.c //include基本概念 //include是预处理指令,翻译之前会替换,编译之前左的处理,#都是预处理指令,翻译时候会添加别的内容进来. #include <stdio.h ...
- 利用JDBC或者事物或者调用存储过程实现往MySQL插入百万级数据
转自:http://www.cnblogs.com/fnz0/p/5713102.html 想往某个表中插入几百万条数据做下测试, 原先的想法,直接写个循环10W次随便插入点数据试试吧,好吧,我真的很 ...