【机器学习炼丹术】的学习笔记分享<>

小白学PyTorch | 16 TF2读取图片的方法

小白学PyTorch | 15 TF2实现一个简单的服装分类任务

小白学PyTorch | 14 tensorboardX可视化教程

小白学PyTorch | 13 EfficientNet详解及PyTorch实现

小白学PyTorch | 12 SENet详解及PyTorch实现

小白学PyTorch | 11 MobileNet详解及PyTorch实现

小白学PyTorch | 10 pytorch常见运算详解

小白学PyTorch | 9 tensor数据结构与存储结构

小白学PyTorch | 8 实战之MNIST小试牛刀

小白学PyTorch | 7 最新版本torchvision.transforms常用API翻译与讲解

小白学PyTorch | 6 模型的构建访问遍历存储(附代码)

小白学PyTorch | 5 torchvision预训练模型与数据集全览

小白学PyTorch | 4 构建模型三要素与权重初始化

小白学PyTorch | 3 浅谈Dataset和Dataloader

小白学PyTorch | 2 浅谈训练集验证集和测试集

小白学PyTorch | 1 搭建一个超简单的网络

小白学PyTorch | 动态图与静态图的浅显理解

这个系列《小白学PyTorch》的所有代码和数据集放在了公众号【机器学习炼丹术】后台,回复【pytorch】获取(还在更新的呢):

【新闻】:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测、医学图像、时间序列、推荐搜索等多个目标为技术学习的分群和水群唠嗑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会。

参考目录:

  • 1 为什么用tfrec文件

  • 2 tfrec文件的内部结构

  • 3 制作tfrec文件

  • 4 读取tfrec文件

本文的代码已经上传公众号后台,回复【PyTorch】获取。

第一次接触到TFrec文件,我也是比较蒙蔽的其实:

可以看到文件是.tfrec后缀的,而且先记住这个文件是186.72MB大小的。

1 为什么用tfrec文件

正常情况下我们用于训练的文件夹内部往往会存着成千上万的图片或文本等文件,这些文件通常被散列存放。这种存储方式有一些缺点:

  • 占用磁盘空间;
  • 一个一个读取文件消耗时间

而tfrec格式的文件存储形式会很合理的帮我们存储数据,核心就是tfrec内部使用Protocol Buffer的二进制数据编码方案,这个方案可以极大的压缩存储空间

之前我们知道一个tfrec文件100多M,这是因为这个tfrec文件内存储了很多的图片,类似于压缩,对tfrec解压缩后可以获取到一部分的数据集,当我们把全部的rfrec文件都解压缩后,可以获取到全部的数据集。

值得一提的是,rfrec文件内除了可以存储图片,还可以存储其他的数据,比方说图片的label。字符串,float类型等都可以转换成二进制的方法,所以什么数据类型基本上都可以存储到rfrec文件内,从而简化读取数据的过程。

2 tfrec文件的内部结构

tfrec文件时tensorflow的数据集存储格式,tensorflow可以高效的读取和处理这些数据集,因此我见过有的数据集因为是tfrec文件,所以用TF读取数据集,然后用pytorch训练模型。

之前提到了tfrec文件里面是有多个样本的,所以tfrec可以为是多个tf.train.Example文件组成的序列(每一个example是一个样本),然后每一个tf.train.Example又是由若干个tf.train.Features字典组成。这个Features可以理解为这个样本的一些信息,如果是图片样本,那么肯定有一个Features是图片像素值数据,一个Features是图片的标签值;如果是预测任务,那么这个Feature可能就是一些字符串类型的特征

3 制作tfrec文件

import tensorflow as tfimport glob# 先记录一下要保存的tfrec文件的名字tfrecord_file = './train.tfrec'# 获取指定目录的所有以jpeg结尾的文件listimages = glob.glob('./*.jpeg')with tf.io.TFRecordWriter(tfrecord_file) as writer:    for filename in images:        image = open(filename, 'rb').read()  # 读取数据集图片到内存,image 为一个 Byte 类型的字符串        feature = {  # 建立 tf.train.Feature 字典            'image': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image])),  # 图片是一个 Bytes 对象            'label': tf.train.Feature(int64_list=tf.train.Int64List(value=[1])),            'float':tf.train.Feature(float_list=tf.train.FloatList(value=[1.0,2.0])),            'name':tf.train.Feature(bytes_list=tf.train.BytesList(value=[str.encode(filename)]))        }        # tf.train.Example 在 tf.train.Features 外面又多了一层封装        example = tf.train.Example(features=tf.train.Features(feature=feature))  # 通过字典建立 Example        writer.write(example.SerializeToString())  # 将 Example 序列化并写入 TFRecord 文件

代码中我们需要注意的地方是:

  • 先读取图片,然后构建一个字典来作为这个example的格式;
  • 上面代码中,字典中有四个属性,首先是image图片本身的像素值,然后有一个标签,标签是int类型,然后有一个float浮点类型,name是一个字符串类型,这个string类型的需要转换成byte字节类型的才能进行存储,所以这里使用str.encode来把字符串转换成字节;
  • 然后这个features再经过Example的封装,再然后把这个example写进这个tfrec文件中。

这一段代码建议保存下来,方便以后的直接参考和复制。构建tfrec文件对于tensorflow处理图片来说,应该是绕不过的一个步骤。

4 读取tfrec文件

现在,我们运行完上面的代码,应该生成了一个./train.tfrec文件,下面我们再对这个文件进行读取。

import tensorflow as tf

dataset = tf.data.TFRecordDataset('./train.tfrec')

def decode(example):    feature_description = {        'image': tf.io.FixedLenFeature([], tf.string),        'label': tf.io.FixedLenFeature([], tf.int64),        'float': tf.io.FixedLenFeature([1, 2], tf.float32),        'name': tf.io.FixedLenFeature([], tf.string)    }    feature_dict = tf.io.parse_single_example(example, feature_description)    feature_dict['image'] = tf.io.decode_jpeg(feature_dict['image'])  # 解码 JEPG 图片    return feature_dict

dataset = dataset.map(decode).batch(4)for i in dataset.take(1):    print(i['image'].shape)    print(i['label'].shape)    print(i['float'].shape)    print(bytes.decode(i['name'][0].numpy()))
  • 首先使用专门用来读取tfrec文件的方法tf.data.TFRecordDataset,进行读取,创建了一个dataset,但是这个dataset并不能直接使用,需要对tfrec中的example进行一些解码;
  • 自己写一个解码函数decode,首先写一个特征描述,我们知道在保存tfrec的时候每一个example有四个特征,这里需要对每一个特征确定他的类型,是string还是int还是float这样的。
  • 然后通过这个特征描述和tf.io.parse_single_example方法,从example中提取到对应的特征;
  • 因为image是一个图片张量,而我们读取的时候是读取的tf.string的类型,所以使用tf.io.decode_jpeg()来把字符串解码成一个tensor张量。
  • 最后使用上节课讲过的.batch(4)把数据集每一个batch包含四个样本。

上面代码输出的结果为:

需要注意的是这个如何把name转换成string类型的,如果已经在本地跑完了上面的代码,可以自己看看i['name']是一个什么类型的,然后自己试试如何转换成string类型的。上面的代码是能成功转换的。

下一次的内容就是如何构建模型,然后怎么把数据集喂给模型。

- END -<>

小白学论文 | EfficientNet强在哪里

小白学论文 | 神经网络初始化Xavier

小白学论文 | 端侧神经网络GhostNet(2019)

小白学目标检测 | RCNN, SPPNet, Fast, Faster

小白学图像 | BatchNormalization详解与比较

小白学图像 | Group Normalization详解+PyTorch代码

小白学图像 | 八篇经典CNN论文串讲

图像增强 | CLAHE 限制对比度自适应直方图均衡化

小白学卷积 | 深入浅出卷积网络的平移不变性

小白学卷积 | (反)卷积输出尺寸计算

损失函数 | 焦点损失函数 FocalLoss 与 GHM

<>

小白学ML | 随机森林 全解 (全网最全)

小白学SVM | SVM优化推导 + 拉格朗日 + hingeLoss

小白学LGB | LightGBM = GOSS + histogram + EFB

小白学LGB | LightGBM的调参与并行

小白学XGB | XGBoost推导与牛顿法

评价指标 | 详解F1-score与多分类F1

小白学ML | Adaboost及手推算法案例

小白学ML | GBDT梯度提升树

小白学优化 | 最小二乘法与岭回归&Lasso回归

小白学排序 | 十大经典排序算法(动图)

杂谈 | 正态分布为什么如此常见

Adam优化器为什么被人吐槽?

机器学习不得不知道的提升技巧:SWA与pseudo-label

<>

秋招总结 | 一个非Top学校的跨专业的算法应届研究生的几十场面试

【小白面经】快手 AI算法岗 附答案解析

【小白面经】 拼多多 AI算法岗 附带解析

【小白面经】八种应对样本不均衡的策略

【小白面经】之防止过拟合的所有方法

【小白面经】梯度消失爆炸及其解决方法

【小白面经】 判别模型&生成模型

<>

【小白健身】腹肌搓衣板化

【小白健身 】背阔大作战(下)

【小白健身】背阔大作战(上)

【小白健身】徒手健身40个动作(gif)

【小白健身】弹力带轻度健身gif动图

data后缀文件解码_小白学PyTorch | 17 TFrec文件的创建与读取相关推荐

  1. c++list遍历_小白学PyTorch | 6 模型的构建访问遍历存储(附代码)

    关注一下不迷路哦~喜欢的点个星标吧~<> 小白学PyTorch | 5 torchvision预训练模型与数据集全览 小白学PyTorch | 4 构建模型三要素与权重初始化 小白学PyT ...

  2. pytorch默认初始化_小白学PyTorch | 9 tensor数据结构与存储结构

    [机器学习炼丹术]的学习笔记分享<> 小白学PyTorch | 8 实战之MNIST小试牛刀 小白学PyTorch | 7 最新版本torchvision.transforms常用API翻 ...

  3. 3 矩阵运算_小白学PyTorch——pytorch常见运算详解

    公众号关注 "DL-CVer" 设为 "星标",DLCV消息即可送达! 参考目录: 1 矩阵与标量 2 哈达玛积 3 矩阵乘法 4 幂与开方 5 对数运算 6 ...

  4. 【小白学PyTorch】17.TFrec文件的创建与读取

    [机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 小白学PyTorch | 16 TF2读取图片的方法 小白学PyTorch | 15 TF2实现一个简单的服装分 ...

  5. logback-spring.xml 文件路径 相对路径_小白学 Python(18):基础文件操作

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  6. python 相对路径报错_小白学 Python(18):基础文件操作

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  7. 【小白学PyTorch】16.TF2读取图片的方法

    <<小白学PyTorch>> 扩展之tensorflow2.0 | 15 TF2实现一个简单的服装分类任务 小白学PyTorch | 14 tensorboardX可视化教程 ...

  8. pytorch dataset_【小白学PyTorch】16.TF2读取图片的方法

    <> 扩展之tensorflow2.0 | 15 TF2实现一个简单的服装分类任务 小白学PyTorch | 14 tensorboardX可视化教程 小白学PyTorch | 13 Ef ...

  9. 【小白学PyTorch】18.TF2构建自定义模型

    [机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 扩展之Tensorflow2.0 | 17 TFrec文件的创建与读取 扩展之Tensorflow2.0 | 1 ...

最新文章

  1. 基于python的界面自动化测试-基于Python语言的自动化测试实战第二章(上)
  2. python爬虫beautifulsoup实例-【Python实例二】BeautifulSoup爬虫简单实践
  3. 《Linux内核设计与实现》读书笔记(十)- 内核同步方法【转】
  4. 关于Dictionary元素的遍历
  5. 信息熵与信息增益的理解
  6. python解释器、pycharm安装及环境变量配置
  7. 【LeetCode】【HOT】84. 柱状图中最大的矩形(栈)
  8. signature=172bb3bb7ef43cff1707b389c78d27cb,Signatures? of suicide
  9. python做副业_学习Python可以做哪些副业,你是不是感觉自己错过了一个亿?
  10. goods购物表MySQL的代码_python采用sqlachmy购物商城
  11. 某听书网站系统漏洞,利用抓包拼接方式获取网站资源
  12. java中arraylist扩容问题_Arraylist扩容机制
  13. paip..net VS2010提示当前上下文中不存在名称的解决
  14. 80x86汇编小站-公告
  15. 转行软件测试,简历怎么包装成1年工作经验的测试工程师
  16. #今日说码栏目#第十五集 iconfont-阿里巴巴矢量图的使用方法(保姆级教学,挑战全网最细致的使用矢量图)
  17. ereg/eregi报错处理办法
  18. pos方式下载文件,解决url参数过长问题
  19. 微信小程序-canvas 2d带动画的半圆形刻度进度条
  20. android编码技巧_我如何使用编码技巧使航空公司取代丢失的婴儿车

热门文章

  1. NOSQL schema创建原则
  2. 版权所有LIKEWING_柳我借地存个图学习一下
  3. 微信视频号的实时推荐技术架构分享
  4. 【干货】陆奇:新格局下的创业创新机会.pdf(附下载链接)
  5. 【报告分享】2020人工智能+安防行业应用研究分析报告.pdf(附下载链接)
  6. 【报告分享】2020直播生态研究报告.pdf(附下载链接)
  7. 【报告分享】2009-2019年“双11”购物节关键数据盘点与发展趋势分析报告.pdf(附下载链接)
  8. 【报告分享】中国创新生态发展报告2019-德勤.pdf
  9. 【专访】首届腾讯社交广告“高校算法大赛”落幕 冠亚季军团队参赛心得精彩分享
  10. java int范围_Java之int及它的取值范围