tfrecord文件介绍、读取、写入介绍

2024-04-29 02:52
文章标签 读取 介绍 写入 tfrecord

本文主要是介绍tfrecord文件介绍、读取、写入介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、tfrecord文件格式介绍

       tfrecord文件格式,是深度学习框架tensorflow专用的一种文件格式,其底层使用protobuf,TensorFlow(python)也提供了api用于读取和写入tfrecord,非常方便,而对于golang语言,目前没有成熟的包可以使用,调研过一个nivida的开源库,这个库已经三四年没有更新,在读取tfrecord上存在问题,所以go语言,至今没有找到合适的包可以操作tfrecord。

       一个tfrecord文件是有多个example组成,一个example是有多个key-value对构成的结构:

2、tfrecord文件操作

测试环境:

python:3.8

TensorFlow:2.13

系统:Ubuntu2004

2.1 生成tfrecord

#!/usr/bin/python3.10
import tensorflow as tf
import numpy as npdef _bytes_feature(value):if isinstance(value, type(tf.constant(0))):value = value.numpy() return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))def _float_feature(value):return tf.train.Feature(float_list=tf.train.FloatList(value=[value]))def _int64_feature(value):return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))def _int64_list_feature(value):return tf.train.Feature(int64_list=tf.train.Int64List(value=value))def _bytes_list_feature(value):return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value.astype(np.float32).tobytes()]))def serialize_example(f0, f1, f2, f3, f4):features = {'a': _int64_feature(f0),'b': _int64_list_feature(f1),'c': _bytes_feature(f2),'d': _float_feature(f3),'e': _bytes_list_feature(f4)}example_proto = tf.train.Example(features=tf.train.Features(feature=features))return example_proto.SerializeToString()def main():filename = 'tf.tfrecord'with tf.io.TFRecordWriter(filename) as writer:for i in range(10):example = serialize_example(1, [1, 1, 9], b'tfrecord', 1.4, np.array([1, 2, 3]))writer.write(example)if __name__ == '__main__':main()

上面代码共写了10个example到文件里,运行上面 代码之前,需要安装tensorflow:

TensorFlow安装完成后,运行上面python代码:

执行完成后,生成tf.tfrecord文件,下面我们会尝试读取一下生成的这个文件。

2.2 读取tfrecord

上面2.1生成了一个tfrecord文件,我们就来读取这个文件,首先这个tfrecord一共包含10个example,每个example包含5个key,可以对照第一章节的图示进行理解,读取代码如下:

#!/usr/bin/python3.10
import tensorflow as tf
import numpy as npfeature_desc = {'a': tf.io.FixedLenFeature((), tf.int64, default_value=0),'b': tf.io.FixedLenFeature((3), tf.int64, default_value=[-1, -1, -1]),'c': tf.io.FixedLenFeature((), tf.string, default_value=''),'d': tf.io.FixedLenFeature((), tf.float32, default_value=0.0),'e': tf.io.FixedLenFeature((), tf.string)
}def main():filename = '/root/python/tfrecord/tf.tfrecord'examples = tf.data.TFRecordDataset(filename)for example in examples:feature = tf.io.parse_single_example(example, feature_desc)print('a=', feature['a'].numpy())print('b=', feature['b'].numpy())print('c=', feature['c'].numpy().decode('utf-8'))print('d=', feature['d'].numpy())print('e=', tf.io.decode_raw(feature['e'], tf.float32))if __name__ == '__main__':main()

代码运行结果:

3、获取tfrecord文件特征属性

当某些时候,我们不知道tfrecord的特征属性时,也就是不知道文件里的feature格式时,我们可以用下面的方法将feature的key值、value等信息打印出来:

#!/usr/bin/python3.10
import tensorflow as tf
import numpy as npdef getTFRecordFormat(files):  # 加载TFRecord数据  ds = tf.data.TFRecordDataset(files)  ds = ds.batch(1)  ds = ds.prefetch(buffer_size=tf.data.AUTOTUNE)  for batch_data in ds.take(1):  for serialized_example in batch_data:  example_proto = tf.train.Example.FromString(serialized_example.numpy())  for key, feature in example_proto.features.feature.items():  ftype = None  fvalue = None  if feature.HasField('bytes_list'):  ftype = 'bytes_list'  fvalue = (feature.bytes_list.value)  elif feature.HasField('float_list'):  ftype = 'float_list'  fvalue = (feature.float_list.value)  elif feature.HasField('int64_list'):  ftype = 'int64_list'  fvalue = (feature.int64_list.value)  if ftype:  result = '{0} : {1} {2}'.format(key, ftype, fvalue)  print(result)  def main():filename = '/root/python/tfrecord/tf.tfrecord'getTFRecordFormat(filename)
if __name__ == '__main__':main()

代码运行记录:

4、为什么使用tfrecord

     TFRecord文件格式在机器学习和深度学习应用中具有多个优势,这也是为什么它被广泛采用的原因。以下是TFRecord文件格式的主要优点:

  • 高效的数据存储与读取:TFRecord使用二进制格式来存储数据,相比于文本格式(如CSV或JSON),它更加紧凑,因此可以节省存储空间。此外,二进制格式的数据读取速度也更快,这对于大规模数据集的训练和推理过程尤为重要。
  • 多样化的数据类型支持:TFRecord可以支持多种数据类型,包括整数、浮点数、字符串等,这使得它非常适合存储各种类型的训练数据。无论是图像、文本还是其他类型的数据,都可以方便地存储为TFRecord格式。
  • 方便的数据预处理:通过将数据转换为TFRecord格式,可以方便地进行数据预处理操作,如数据增强、归一化等。这些操作可以在数据加载阶段进行,从而避免了在训练过程中重复进行预处理,提高了训练效率。
  • 易于扩展与并行处理:TFRecord文件可以轻松地扩展以适应更大的数据集。此外,由于其紧凑的二进制格式和高效的数据读取机制,TFRecord文件也支持并行处理,可以充分利用多核CPU或GPU的并行计算能力。
  • 跨平台兼容性:TFRecord文件使用Protocol Buffers进行编码,这是一种跨平台的序列化结构数据格式。因此,TFRecord文件可以在不同的操作系统和编程环境中使用,具有良好的兼容性。

综上所述,TFRecord文件格式在机器学习和深度学习中具有高效、灵活、易于扩展和跨平台兼容等优点,使得它成为处理大规模数据集的首选格式之一。

这篇关于tfrecord文件介绍、读取、写入介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/944935

相关文章

Java中 instanceof 的用法详细介绍

《Java中instanceof的用法详细介绍》在Java中,instanceof是一个二元运算符(类型比较操作符),用于检查一个对象是否是某个特定类、接口的实例,或者是否是其子类的实例,这篇文章... 目录引言基本语法基本作用1. 检查对象是否是指定类的实例2. 检查对象是否是子类的实例3. 检查对象是否

什么是ReFS 文件系统? ntfs和refs的优缺点区别介绍

《什么是ReFS文件系统?ntfs和refs的优缺点区别介绍》最近有用户在Win11Insider的安装界面中发现,可以使用ReFS来格式化硬盘,这是不是意味着,ReFS有望在未来成为W... 数十年以来,Windows 系统一直将 NTFS 作为「内置硬盘」的默认文件系统。不过近些年来,微软还在研发一款名

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用