caffe学习(4)数据层
数据是学习的原料,参考官网和网友的资料,来看一下数据与数据层。
Data:Ins and Outs
Caffe学习系列(2):数据层及参数,denny402
数据:输入与输出
在Caffe中,数据是以Blobs流动的(见caffe学习(1)caffe模型三种结构)。数据层的输入输出便需要由其他格式与Blobs进行相互转换。一些常见的变换如平均减法(mean-subtraction)、特征缩放是通过data layer配置完成。新的输入类型需要开发新的数据层,网络的其余部分遵循Caffe层目录的模块化。下段加载了MNIST数据:
layer {name: "mnist"# Data layer loads leveldb or lmdb storage DBs for high-throughput.加载leveldb 或 lmdb类型的数据实现高吞吐量type: "Data"# the 1st top is the data itself: the name is only conventiontop: "data"# the 2nd top is the ground truth: the name is only conventiontop: "label"# the Data layer configurationdata_param {# path to the DBsource: "examples/mnist/mnist_train_lmdb"# type of DB: LEVELDB or LMDB (LMDB supports concurrent reads)backend: LMDB# batch processing improves efficiency.batch_size: 64}# common data transformationstransform_param {# feature scaling coefficient: this maps the [0, 255] MNIST data to [0, 1]scale: 0.00390625}
}
- name: 表示该层的名称,可随意取,本层为”mnist”。
- type: 层类型,如果是Data,表示数据来源于LevelDB或LMDB。根据数据的来源不同,数据层的类型也不同(后面会详细阐述)。一般在练习的时候,我们都是采用的LevelDB或LMDB数据,因此层类型设置为Data。
- top或bottom: 每一层用bottom来输入数据,用top来输出数据。如果只有top没有bottom,则此层只有输出,没有输入。反之亦然。如果有多个 top或多个bottom,表示有多个blobs数据的输入和输出。
- data 与 label: 在数据层中,至少有一个命名为data的top。如果有第二个top,一般命名为label。 这种(data,label)配对是分类模型所必需的。本例中第一个top是数据本身,第二个top是label(ground truth)(这些名字只是约定的)。
- include: 一般训练的时候和测试的时候,模型的层是不一样的。该层(layer)是属于训练阶段的层,还是属于测试阶段的层,需要用include来指定。如果没有include参数,则表示该层既在训练模型中,又在测试模型中。(上例中没有出现)
include {phase: TRAIN #仅在训练中出现}
- Transformations: 数据的预处理,可以将数据变换到定义的范围内。如设置scale为0.00390625,实际上就是1/255, 即将输入数据由0-255归一化到0-1之间。除了缩放,还有其他的一些预处理操作:
transform_param {scale: 0.00390625mean_file_size: "examples/cifar10/mean.binaryproto"# 用一个配置文件来进行均值操作mirror: 1 # 1表示开启镜像,0表示关闭,也可用ture和false来表示# 剪裁一个 227*227的图块,在训练阶段随机剪裁(random cropping),在测试阶段从中间裁剪crop_size: 227}
- prefetching:预取,对于吞吐量数据层获取下一批数据,并在Net计算当前批处理时在后台准备。
具体的还需要分析data_param,data_param部分,就是根据数据的来源不同,来进行不同的设置。
数据来自于数据库(如LevelDB和LMDB)
层类型(layer type):Data- 必须设置的参数:
source: 包含数据库的目录名称
batch_size: 每次处理的数据个数,如64 可选的参数:
rand_skip: 在开始的时候,跳过一定数量的数据输入,通常对异步的SGD很有用(useful for asynchronous sgd)。
backend: 选择是采用LevelDB还是LMDB, 默认是LevelDB.
示例:data_param {source: "examples/mnist/mnist_train_lmdb"batch_size: 64}
- 必须设置的参数:
数据来自于内存
层类型:MemoryData- 必须设置的参数:
batch_size:每一次处理的数据个数,比如2
channels:通道数
height:高度
width: 宽度
即指定要从内存中读取的输入块的大小。存储器数据层直接从存储器读取数据,而不复制它。为了使用它,必须调用MemoryDataLayer :: Reset
(C ++)或Net.set_input_arrays
(Python),以便指定一个连续数据源(作为4D行主数组),一次读取一个批处理大小的块。示例:layer {top: "data"top: "label"name: "memory_data"type: "MemoryData"memory_data_param{batch_size: 2height: 100width: 100channels: 1}transform_param {scale: 0.0078125mean_file: "mean.proto"mirror: false} }
- 必须设置的参数:
数据来自于HDF5(Input)
层类型:HDF5Data- 必须设置的参数:
source: 读取的文件名称
batch_size: 每一次处理的数据个数
示例:layer {name: "data"type: "HDF5Data"top: "data"top: "label"hdf5_data_param {source: "examples/hdf5_classification/data/train.txt"batch_size: 10} }
- 必须设置的参数:
数据输出到HDF5(Output)
层类型:HDF5Data- 必须设置的参数:
file_name: 输出到的文件名称
HDF5输出层执行与本节中其他层相反的功能:它将其输出blob写入磁盘。
- 必须设置的参数:
数据来自于图片
层类型:ImageData- 必须设置的参数:
source: 一个文本文件的名字,每一行给定一个图片文件的名称和标签(label)
batch_size: 每一次处理的数据个数,即图片数 - 可选参数:
rand_skip: 在开始的时候,跳过一定的数据输入。通常对异步的SGD很有用。
shuffle: 随机打乱顺序,默认值为false
new_height,new_width: 如果设置,则将图片进行resize
示例:layer {name: "data"type: "ImageData"top: "data"top: "label"transform_param {mirror: falsecrop_size: 227mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"}image_data_param {source: "examples/_temp/file_list.txt"batch_size: 50new_height: 256new_width: 256} }
- 必须设置的参数:
数据来源于Windows
层类型:WindowData- 必须设置的参数:
source: 一个文本文件的名字
batch_size: 每一次处理的数据个数,即图片数
示例:layer {name: "data"type: "WindowData"top: "data"top: "label"include {phase: TRAIN}transform_param {mirror: truecrop_size: 227mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"} window_data_param {source: "examples/finetune_pascal_detection/window_file_2007_trainval.txt"batch_size: 128fg_threshold: 0.5bg_threshold: 0.5fg_fraction: 0.25context_pad: 16crop_mode: "warp"} }
- 必须设置的参数:
Dummy
DummyData用于调试,详见DummyDataParameter。
caffe学习(4)数据层相关推荐
- Caffe 学习:Crop 层
在Fully Convolutional Networks(FCN)中,会用到Crop 层,他的主要作用是进行裁切.下面我们举一个例子来说明如何使用Crop 层. Caffe中的数据是以 bl ...
- caffe学习:Crop 层
在Fully Convolutional Networks(FCN)中,会用到Crop 层,他的主要作用是进行裁切.下面我们举一个例子来说明如何使用Crop 层. Caffe中的数据是以 blobs形 ...
- caffe学习笔记20-BatchNorm层分析
BatchNorm层优点: caffe master branch采用的是分离式写法,conv层扔掉bias,接一个BN层,再接一个带bias的Scale层.(相当于数据标准化,减均值然后除标 ...
- Caffe学习(四)数据层及参数设置
caffe的各种数据层在caffe.proto文件中有定义.通过对定义的caffe.proto文件进行编译,产生支持各种层操作的c++代码.后面将会详细解读caffe.proto文件(在caffe里就 ...
- caffe data层_Caffe 学习:Eltwise层
Caffe 学习:Eltwise层 Eltwise层的操作有三个:product(点乘), sum(相加减) 和 max(取大值),其中sum是默认操作. 1. PROD:按元素乘积 2. SUM:按 ...
- Caffe学习系列(2):数据层及参数
要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成.所有的参数都定义在caffe.proto这个文件 ...
- Caffe学习系列(23):如何将别人训练好的model用到自己的数据上
caffe团队用imagenet图片进行训练,迭代30多万次,训练出来一个model.这个model将图片分为1000类,应该是目前为止最好的图片分类model了. 假设我现在有一些自己的图片想进行分 ...
- Caffe学习系列(17):模型各层特征和过滤器可视化
转载自: Caffe学习系列(17):模型各层特征和过滤器可视化 - denny402 - 博客园 http://www.cnblogs.com/denny402/p/5105911.html cif ...
- Caffe学习系列(16):各层权值参数可视化
原文有更新: Caffe学习系列(16):各层权值参数可视化 - denny402 - 博客园 http://www.cnblogs.com/denny402/p/5103425.html 通过前面的 ...
最新文章
- [转载]VC轻松解析XML文件 - CMarkup类的使用方法
- 装机必备工具(普通家庭版)
- 利用https实现站点访问
- S5PV210开发 -- 交叉编译器
- 给大家介绍一下:网易云信新晋音视频质量诊断专家
- opencv python3 找图片色块_Python 图像处理 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处理...
- springboot对象方式注入
- C++vector容器-数据存取
- iris数据集 测试集_IRIS数据集的探索性数据分析
- vue.js中的组件是什么?
- leetcode —— 33. 搜索旋转排序数组
- Mybatis笔记 – Po映射类型
- 堆中的路径(MOOC)
- HTML实现简易音乐网站
- Dreamweaver8 V8.0.0.2766
- python数学符号大全_数学符号大全
- 163个人域名邮箱申请,163个人邮箱怎么注册创建
- Percent Library百分比布局详解
- python 内置函数 eval
- 惠普台式计算机系统系统修复,一键恢复系统,详细教您怎么一键恢复惠普笔记本系统...