Tensorflow-TFRecord文件

Tensorflow官方对数据读取提供了三种方式

1.预加载数据:即提供运行python代码,使用python代码提供数据

2.填充数据:使用placeholder占位符,再使用feed_dict将数据喂入占位符中

3.通过文件读取数据:直接从文件中读取;通过队列管理器从文件中读取数据。

TFRecord就属于方式3。TFRecord数据文件是一种将图像数据和标签统一存储的二进制文件,能更好的利用内存,在tensorflow中快速的复制,移动,读取,存储等。

TFRecord文件的使用分为两步:

1.先将非规范化的数据写入TFRecord二进制文件中(若没有该文件则新建一个TFRecord文件)

2.对TFRecord文件从队列中进行读取

这么操作的意义就在于:直接对未规范化的数据进行操作,由于不具有规范性,拓展性差、操作复杂等等的劣势,所以先将数据进行转化、规范化,存储进TFRecord二进制文件中,之后再对TFRecord文件中的数据进行操作,具有更高的拓展性,同时也更有效率。

关于TFRecord文件的写入:

首先明确TFRecord文件中存放着所有图像数据对应的Protocol Buffer数据的实例。也就是说TFRecord文件中存放着很多个实例,每个实例都是Protocol Buffer类型的数据。而每个实例在TFRecord中都是固定格式的,这个格式通过一个structure(在OOP中对应的是类)来定义,这就是TFRecord统一格式的方式。

TFRecord给定的类的格式:

tf.train.Example中包含了属性名称到取值的字典,其中属性名称为字符串,属性的取值可以为字符串(BytesList)、实数列表(FloatList)或者整数列表(Int64List)。

message Example {

 Features features = 1;

};

message Features{

 map<string,Feature> featrue = 1;

};

message Feature{

    oneof kind{

        BytesList bytes_list = 1;

        FloatList float_list = 2;

        Int64List int64_list = 3;

    }

};

所以将格式化前的数据写入TFRecord文件中,需要先将数据格式化,首先将原始未格式化的数据转化为TFRecord给定的类的形式,即将数据信息存入类(数据结构)当中,之后再将其转化为Protocol Buffer的形式,即转化为二进制数据,最后将其转化为字符串的形式,写入TFRecord文件中。

根据以下代码进行详细解读:

for index in range(num_examples)

    example  = tf.train.Example(features=tf.train.Features(feature={

        ‘pixels’: _init64_feature(pixels),

        ‘label’: _init64_feature(np.argmax(labels[index])),

        ‘image_raw’: _bytes_feature(image_raw)}))

    writer.write(example.SerializeToString())

writer.close()

这里的features是类Example的一个参数,通过向tf.train.Example()方法传入features参数来创建一个Example类的实例。所以这里的操作步骤如下:

1.先将原始数据中具有的Example的参数features所需要的信息提取出来,并按照参数features的格式要求存储。

2.将提取出的并且打包好的信息通过tf.train.Features()转化为Protocol Buffer格式,并赋予类Example的参数features。

3.向tf.train.Example()函数传递参数features,该函数会创造一个类Example的实例,并将其转化为Protocol Buffer格式。

这个tf.train.Features()以及tf.train.Example()都将数据转化为Protocol Buffer类型。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值