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. Linux下查看mysql路径

    ps -ef|grep mysql

  2. 【Python数据挖掘】回归模型与应用

    线性回归 ( Linear Regression ) 线性回归中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归称为一元线性回归. 如果回归分析中包括两个或两个以上的自变量, ...

  3. 自己开发Thinkpad电源管理程序

    自己开发Thinkpad电源管理程序 - 知乎 https://zhuanlan.zhihu.com/p/20706403

  4. initialize myObject by calling a function that returns an object literal

    w作用域控制变量的可见范围. JavaScript: The Good Parts Instead of initializing myObject with an object literal, w ...

  5. 转:java高并发学习记录-死锁,活锁,饥饿

    死锁 两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 为什么会产生死锁: ① 因为系统资源不足. ② 进程运行推进的顺序不合适.    ③ ...

  6. 【python】常用函数

    使用list生成dict(可指定单条长度和数据类型,splen为4即为list中每4行组成dict中一条) def list2dict(srclist,splen,datatype):# dataty ...

  7. 一条SQL引起的雪崩

    1.问题描述 MySQL服务器卡死,CPU飚到300%多,命令执行缓慢. 2.问题定位 踩了狗屎运,直接找到了问题缘由 发现了一条SQL写的模糊匹配,将%写在了关键字的前面,这样会造成查询不使用索引, ...

  8. getApplicationContext()、Activity.this、 getBaseContext区别

    getApplicationContext()返回应用的上下文,生命周期是整个应用,应用退出它才被摧毁 Activity.this 返回当前activity的上下文,属于activity ,activ ...

  9. (3.9)常用知识-标识值(identity)的不连续与强行插入、计算列

    概念:标识值 identity(begin,add_number) 是一种特殊的值,依赖于列,由sql server自动维护,是自增的,而且一般是不会重复的.但是sql server并不维护标识(id ...

  10. Using Bluetooth LE with Go (Golang)

    Using Bluetooth LE with Go (Golang)  Gatt is a Go package, which provides developers to create BLE a ...