tfrecord和dataset

关于TFRecord可以看这篇文章:

https://xmfbit.github.io/2020/04/03/tfrecord-introduction/

 

TFRecord是TensorFlow中常用的数据打包格式。通过将训练数据或测试数据打包成TFRecord文件,就可以配合TF中相关的DataLoader / Transformer等API实现数据的加载和处理,便于高效地训练和评估模型。

 

组成TFReocrd的砖石:tf.Example

tf.Example是一个Protobuffer定义的message,表达了一组string到bytes value的映射。TFRecord文件里面其实就是存储的序列化的tf.Example

复制代码
message Example {
  Features features = 1;
};

message Features {
  // Map from feature name to feature.
  map<string, Feature> feature = 1;
};

// Containers for non-sequential data.
message Feature {
  // Each feature can be exactly one kind.
  oneof kind {
    BytesList bytes_list = 1;
    FloatList float_list = 2;
    Int64List int64_list = 3;
  }
};

// 这里摘一个 Int64List 的定义如下,float/bytes同理
message Int64List {
  // 可以看到,如其名所示,表示的是int64数值的列表
  repeated int64 value = 1 [packed = true];
}
复制代码

可以用map来将parser的pipeline应用于原dataset:

# 注意这里不能用get_image_from_single_example
# 因为 `.numpy()` 不能用于静态 Map
image_data = dataset.map(parse_from_single_example)

first_image_data = next(iter(image_data))
image = decode_image_from_bytes(first_image_data['image'].numpy())

 

然后是这篇文章:

https://zhuanlan.zhihu.com/p/33223782

 

一、为什么用Dataset API

1. 简洁性:

    • 常规方式:用python代码来进行batch,shuffle,padding等numpy类型的数据处理,再用placeholder + feed_dict来将其导入到graph中变成tensor类型。因此在网络的训练过程中,不得不在tensorflow的代码中穿插python代码来实现控制。
    • Dataset API:将数据直接放在graph中进行处理,整体对数据集进行上述数据操作,使代码更加简洁。

2. 对接性:TensorFlow中也加入了高级API (Estimator、Experiment,Dataset)帮助建立网络,和Keras等库不一样的是:这些API并不注重网络结构的搭建,而是将不同类型的操作分开,帮助周边操作。可以在保证网络结构控制权的基础上,节省工作量。若使用Dataset API导入数据,后续还可选择与Estimator对接。

二、为什么用TFRecord

在数据集较小时,我们会把数据全部加载到内存里方便快速导入,但当数据量超过内存大小时,就只能放在硬盘上来一点点读取,这时就不得不考虑数据的移动、读取、处理等速度。使用TFRecord就是为了提速和节约空间的。

 

在进行代码功能讲解之前,先明确一下想要存储和读取的数据是什么样子

专有名词:结合下图说明名称

  • 样本 (example): [公式] :输入[公式] 和 正确的输出[公式]一起叫做样本。给网络展示了什么输入该产生什么样的输出。这里每个[公式]是五维向量,每个[公式]是一维向量。
    • 表征 (representation):[公式] :集合了代表个人的全部特征。
      • 特征 (feature): [公式] 中的某个维:如年龄,职业。是某人的一个特点。
    • 标签 (label):[公式]:正确的输出。

 

 

1. 常用存储:

输入[公式] 和 标签[公式]是分开存储,若有100个样本,所有的输入存储成一个 [公式] 的numpy矩阵;所有的输出则是 [公式] 。

2. TFRecord存储:

TFRecord是以字典的方式一次写一个样本,字典的keys可以不以输入和标签,而以不同的特征(如学历,年龄,职业,收入)区分,在随后的读取中再选择哪些特征形成输入,哪些形成标签。

 

posted @   blcblc  阅读(121)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2019-03-14 今天学到一个python编解码中文的重要技巧
2018-03-14 牛顿法的学习 - 与梯度下降的对比分析 - 拟牛顿法 - 共轭梯度法 - 有一些没懂的,后面再看
2018-03-14 概率分布和概率密度
2018-03-14 各种熵和关系
2018-03-14 两种loss在不同网络结构下的分析 - loss和误差后传的分析
2017-03-14 这里面有不少面试题
2017-03-14 大数据的一个行业分享会
点击右上角即可分享
微信分享提示