Caffe学习笔记(三):Caffe数据是如何输入和输出的?

Caffe中的数据流以Blobs进行传输,在《Caffe学习笔记(一):Caffe架构及其模型解析》中已经对Blobs进行了简单的介绍。下面对caffe数据是如何输入和输出做更加详细的分析。

1、输入/输出之Blobs

caffe使用blobs结构来存储、交换并处理网络中正向和反向迭代时的数据和导数信息,blob是caffe的标准数组结构,是caffe中处理和传递实际数据的数据封装包,它提供了一个统一的内存接口,从数学意义上说,blob是按C风格连续存储的N维数组。

数据层包括输入层和输出层,数据输入层将输入转换为blob加载数据,数据输出层将blob转换为其他格式输出。

均值消去、特征缩放等基本数据处理都是在数据输入层进行配置的。新的数据格式输入需要定义新的数据层,网络的其余部分遵循caffe中层目录的模块结构设定。

2、caffe数据输入层

数据输入层一般定义在*.prototxt中,以cifar为例,就是包含在cifar10_quick_train_test.prototxt中,数据输入层可以包括带训练的数据输入和待预测数据输入。下面随机给出一个例子:

layer
{
	name: "mnist"
	type: "Data" 		# 数据层加载leveldb或lmdb的数据库存储格式保证快速传输
	top: "data" 		# 第一个顶部(top)是数据本身:“data”的命名只是方便使用
	top: "label"   		# 第二个顶部(top)是数据标签:“label”的命名只是方便使用
	# 数据层具体配置
	data_param
	{
    	source: "examples/mnist/mnist_train_lmdb"	# 数据库路径
		backend: LMDB     			# 数据库类型:LEVELDB或LMDB(LMDB支持并行读取)
		batch_size: 64  			# 批量处理,提高效率
	}
  	# 常用数据转换
	transform_param
	{
		scale: 0.00390625   			# 特征归一化系数,将范围为[0, 255]的MNIST数据归一化为[0, 1]
	}
}

需要注意的是:

(1)、对于数据输入层,数据层从top的blobs向模型输出数据,但是没有bottom的blobs,因为数据层没有输入,而是采用数据层加载的方式;

(2)、数据层至少要有一个top输出,规范化的命名为data,对于ground truth,规范化的命名为label,这两个top只是简单生成blobs,它们的命名没有任何特殊含义,只是( data,label)映射关系对于分类模型更方便而已;

(3)、在数据层的定义中,数据预处理通过转换参数来定义;

(4)、数据层通过下面语法定义该层的数据是用来训练的还是用来预测的:

include
{
        phase:TRAIN
}

include
{
        phase:TEST
}

(5)、为了提高网络吞吐量,数据层在网络计算当前数据块的同时在后台获取并准备下一个数据块;

(6)、网络可以有任意数量和类型的输入,可根据需要定义任意数量的数据层,但是必须保证它们有唯一的name和top。

3、caffe数据输出层

数据输出层是用训练出来的模型进行预测得出的结果输出层,下面给出一个实例:

layer
{
        name:"accuracy"
        type:"Accuracy"
        bottom:"ip2"
        bottom:"label"
        top:"accuracy"		#训练出来的模型预测出来的准确度

        include
        {
                 phase:TEST	#说明该输出是预测得出的输出结果
        }
}

关于caffe数据层的知识后续可结合代码做进一步的分析。

Caffe学习笔记(三):Caffe数据是如何输入和输出的?的更多相关文章

  1. MYSQL初级学习笔记三:数据的操作DML!(视频序号:初级_24,25,36)

    知识点五:数据的操作DML(24,25,36) 插入数据: --测试插入记录INSERT CREATE TABLE IF NOT EXISTS user13( id TINYINT UNSIGNED ...

  2. Python学习笔记三:数据特征分析

    完成数据清理后,下面通过图表展开对数据的分析. 1.前期初判(分布分析): 1)判断分组区间: # a.散点图:plt.scatter(data[字段1],data['字段2'], s = data[ ...

  3. 《手把手教你学C语言》学习笔记(7)---程序的输入与输出

    程序设计中,为了观察程序的运行状态和结构,需要输出指定的内容:为了让程序能够更加灵活,可以根据需求输入内容,让计算机处理和运行:所以程序的输入输出就显的尤为重要.主要包括printf和scanf函数. ...

  4. CAFFE学习笔记(五)用caffe跑自己的jpg数据

    1 收集自己的数据 1-1 我的训练集与测试集的来源:表情包 由于网上一幅一幅图片下载非常麻烦,所以我干脆下载了两个eif表情包.同一个表情包里的图像都有很强的相似性,因此可以当成一类图像来使用.下载 ...

  5. CAFFE学习笔记(四)将自己的jpg数据转成lmdb格式

    1 引言 1-1 以example_mnist为例,如何加载属于自己的测试集? 首先抛出一个问题:在example_mnist这个例子中,测试集是人家给好了的.那么如果我们想自己试着手写几个数字然后验 ...

  6. Caffe学习笔记2--Ubuntu 14.04 64bit 安装Caffe(GPU版本)

    0.检查配置 1. VMWare上运行的Ubuntu,并不能支持真实的GPU(除了特定版本的VMWare和特定的GPU,要求条件严格,所以我在VMWare上搭建好了Caffe环境后,又重新在Windo ...

  7. Caffe学习笔记(一):Caffe架构及其模型解析

    Caffe学习笔记(一):Caffe架构及其模型解析 写在前面:关于caffe平台如何快速搭建以及如何在caffe上进行训练与预测,请参见前面的文章<caffe平台快速搭建:caffe+wind ...

  8. Caffe学习笔记4图像特征进行可视化

    Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...

  9. Caffe学习笔记3

    Caffe学习笔记3 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和h ...

随机推荐

  1. Oracle涂抹oracle学习笔记第10章Data Guard说,我就是备份

    DG 是备份恢复工具,但是更加严格的意义它是灾难恢复 Data Guard是一个集合,由一个Primary数据库及一个或者多个Standby数据库组成,分两类逻辑Standby和物理Standby 1 ...

  2. 任务调度quartz整理

    一张图,了解quartz运行机制: 此图表示:Scheduler是容器,Trigger是多个触发器,jobDetail是多个任务,Calendar是多个日历. jobDetail任务,需要指定类实现J ...

  3. C#中资源文件的使用

    在程序中会用到图片,有两种方法,一种是将图片放在运行文件夹中,直接调用,另一种是将图片放入资源文件中. 方法一,一般在.exe文件同级创建文件夹,如“ico”,然后把图标放进去.在程序中代码采用相对路 ...

  4. LVS,HAPROXY,NGINX各自的优缺点

    Nginx/LVS/HAProxy的基于Linux的开源免费的负载均衡软件. LVS:使用集群技术和Linux操作系统实现一个高性能.高可用的服务器,它具有很好的可伸缩性.可靠性和可管理性,是一款强大 ...

  5. If the parts of an organization (e.g., teams, departments, or subdivisions) do not closely reflect the essential parts of the product, or if the relationship between organizations do not reflect the r

    https://en.wikipedia.org/wiki/Conway%27s_law

  6. zipline风险指标计算 (empyrical模块)

    概述 量化中,我们经常会遇到各种量化指标的计算,对于zipline来说,也会对这部分计算进行处理,由于指标计算的通用性比较强,所以,zipline单独封装了 empyrical 这个模块,可以处理类似 ...

  7. svn搭建(linux下)

    安装svn: 依赖包: yum install openssl openssl-devel 问题(可以忽略不计):configure: WARNING: we have configured with ...

  8. Cyclic Nacklace ---hdu3746(循环节,kmp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 给你一个字符串,让你在后面加尽量少的字符,使得这个字符串成为一个重复串. abca---添加bc ...

  9. python在处理CSV文件时,字符串和列表写入的区别

    概述 Python在处理CSV文件时,如果writerow的对象是<type 'unicode'>字符串时,写入到CSV文件时将会出现一个字符占一个单元格的情况: 但是将字符串转换为列表类 ...

  10. vs2010 重新配置帮助文档

    1.VS2010帮助文件不支持重新配置,这个时候打开C:\Program Files\Microsoft Help Viewer\1.0目录,找到“HelpLibManager.exe.config” ...