数据是学习的原料,参考官网和网友的资料,来看一下数据与数据层。

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部分,就是根据数据的来源不同,来进行不同的设置。

  1. 数据来自于数据库(如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}
  2. 数据来自于内存
    层类型: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}
      }
  3. 数据来自于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}
      }
  4. 数据输出到HDF5(Output)
    层类型:HDF5Data

    • 必须设置的参数:
      file_name: 输出到的文件名称
      HDF5输出层执行与本节中其他层相反的功能:它将其输出blob写入磁盘。
  5. 数据来自于图片
    层类型: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}
      }
  6. 数据来源于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"}
      }
  7. Dummy
    DummyData用于调试,详见DummyDataParameter。

caffe学习(4)数据层相关推荐

  1. Caffe 学习:Crop 层

        在Fully Convolutional Networks(FCN)中,会用到Crop 层,他的主要作用是进行裁切.下面我们举一个例子来说明如何使用Crop 层. Caffe中的数据是以 bl ...

  2. caffe学习:Crop 层

    在Fully Convolutional Networks(FCN)中,会用到Crop 层,他的主要作用是进行裁切.下面我们举一个例子来说明如何使用Crop 层. Caffe中的数据是以 blobs形 ...

  3. caffe学习笔记20-BatchNorm层分析

    BatchNorm层优点:     caffe master branch采用的是分离式写法,conv层扔掉bias,接一个BN层,再接一个带bias的Scale层.(相当于数据标准化,减均值然后除标 ...

  4. Caffe学习(四)数据层及参数设置

    caffe的各种数据层在caffe.proto文件中有定义.通过对定义的caffe.proto文件进行编译,产生支持各种层操作的c++代码.后面将会详细解读caffe.proto文件(在caffe里就 ...

  5. caffe data层_Caffe 学习:Eltwise层

    Caffe 学习:Eltwise层 Eltwise层的操作有三个:product(点乘), sum(相加减) 和 max(取大值),其中sum是默认操作. 1. PROD:按元素乘积 2. SUM:按 ...

  6. Caffe学习系列(2):数据层及参数

    要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成.所有的参数都定义在caffe.proto这个文件 ...

  7. Caffe学习系列(23):如何将别人训练好的model用到自己的数据上

    caffe团队用imagenet图片进行训练,迭代30多万次,训练出来一个model.这个model将图片分为1000类,应该是目前为止最好的图片分类model了. 假设我现在有一些自己的图片想进行分 ...

  8. Caffe学习系列(17):模型各层特征和过滤器可视化

    转载自: Caffe学习系列(17):模型各层特征和过滤器可视化 - denny402 - 博客园 http://www.cnblogs.com/denny402/p/5105911.html cif ...

  9. Caffe学习系列(16):各层权值参数可视化

    原文有更新: Caffe学习系列(16):各层权值参数可视化 - denny402 - 博客园 http://www.cnblogs.com/denny402/p/5103425.html 通过前面的 ...

最新文章

  1. [转载]VC轻松解析XML文件 - CMarkup类的使用方法
  2. 装机必备工具(普通家庭版)
  3. 利用https实现站点访问
  4. S5PV210开发 -- 交叉编译器
  5. 给大家介绍一下:网易云信新晋音视频质量诊断专家
  6. opencv python3 找图片色块_Python 图像处理 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处理...
  7. springboot对象方式注入
  8. C++vector容器-数据存取
  9. iris数据集 测试集_IRIS数据集的探索性数据分析
  10. vue.js中的组件是什么?
  11. leetcode —— 33. 搜索旋转排序数组
  12. Mybatis笔记 – Po映射类型
  13. 堆中的路径(MOOC)
  14. HTML实现简易音乐网站
  15. Dreamweaver8 V8.0.0.2766
  16. python数学符号大全_数学符号大全
  17. 163个人域名邮箱申请,163个人邮箱怎么注册创建
  18. Percent Library百分比布局详解
  19. python 内置函数 eval
  20. 惠普台式计算机系统系统修复,一键恢复系统,详细教您怎么一键恢复惠普笔记本系统...

热门文章

  1. MATLAB使用audioread时报错误:Error using which Must be a string scalar or character vector.
  2. 大学物理实验报告2——数字示波器的使用
  3. 链路聚合的手工模式和LACP模式
  4. 使用 break 语句直接强行退出循环
  5. 2022年动力电池回收行业研究报告
  6. mysql的日志文件
  7. 现代操作系统原理与实现
  8. 离散数学·代数结构【正规子群、商群、群的同态和同构、环与域、格、布尔代数】
  9. Flutter 和小程序混编
  10. 高效操作字串的String Reference类