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. CentOS中制作本地yum源

    1.光盘指向镜像 2.将镜像挂载到某个目录 mkdir /mnt/cdrom mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom 3.修改本机上的YUM源配置文件 ...

  2. 启动windows服务的bat文件编写格式

    1.bat文件需要和bin文件内容放在一起 启动服务的bat文件如下: sc create 邮件服务 binPath= "%~dp0可执行文件名称.exe" start= auto ...

  3. 使用 MySQL 管理层次结构的数据

    概述 我们知道,关系数据库的表更适合扁平的列表,而不是像 XML 那样可以直管的保存具有父子关系的层次结构数据. 首先定义一下我们讨论的层次结构,是这样的一组数据,每个条目只能有一个父条目,可以有零个 ...

  4. NSUserDefault 保存自定义对象

    由于NSUserDefaults 不支持保存自定类,保存的对象需要实现NSCoding协议,不过自定的类型就算实现了NSCoding也不可以保存,可以通过以下方法实现: //h文件 #import & ...

  5. winform实现QQ聊天气泡200行代码

    c# winform实现QQ聊天气泡界面,原理非常简单,通过webKitBrowser(第三方浏览器控件,因为自带的兼容性差)加载html代码实现,聊天界面是一个纯HTML的代码,与QQ的聊天界面可以 ...

  6. 基于HTTP协议的轻量级开源简单队列服务:HTTPSQS 笔记

    队列服务就是为了提高相应速度,把耗时或者不需要即时处理的流程放到异步处理过程中,HTTPSQS就是这样一个服务. 更详细的可以参考 http://blog.s135.com/httpsqs/,这里记录 ...

  7. element自定义表单验证

    element-ui框架下修改密码弹窗进行表单验证. 除了基础校验,密码不为空,长度不小于6字符,需求中还需校验密码由数字和字母组合. 处理代码如下: <el-dialog :visible.s ...

  8. 剑指Offer——不用加减乘除做加法

    题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 分析: "^"是不带进位的加法. "&"可以得到所有进位位组 ...

  9. Hive简介及使用

    一.Hive简介 1.hive概述 Apache Hive™数据仓库软件有助于使用SQL读取,编写和管理驻留在分布式存储中的大型数据集. 可以将结构投影到已存储的数据中.提供了命令行工具和JDBC驱动 ...

  10. LINUX内核分析20133201

    实验:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20133201 姓名:李冬辉 注: 原创作品转载请注明出处 +<Linux内核分析>MOOC课程http://m ...