本人是深度学习的爱好者,最近在参加cv的表情识别训练,把一些步骤和过程记录下来

一.什么是TFRecord

对于计算机的内存来说,我们训练集样本的数目是巨大的,而且这些文件分散在不同的文件夹中,在存读取的过程中会耗费大量的时间和硬盘资源,此时就需要我们用TFRecord的储存格式来帮助存储数据。

protuBuf

TFRecord使用了名为“Protocol Buffer”二进制数据编码方案,它一次性只加载一个二进制文件,在训练数据很多的时候十分方便快捷。并且我们可以对不同的文件夹下的子文件分别生成TFRecord,十分方便。

二.声明tfRecord

首先我们要生成一个TFRecord形式的实例

writer=tf.python_io.TFRecordWriter(filename)image=Image.open(filename)

然后将图片转化为TFRecord存入特征需要的二进制格式,因为人脸训练表情分为图像和分类标志两类,所以分别以bytesList和Int64List的形式存储到feature参数中(feature是字典格式),最后将其序列化转换为字符串,写入TFRecord中。

image_bytes=image.tobytes()
features={}
features['image']=tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_bytes]))
features['label']=tf.train.Feature(int64_list=tf.train.Int64List(value=[int(label_list[i])]))
tf_features=tf.train.Features(feature=features)
tf_example=tf.train.Example(features=tf_features)
tf_serialized=tf_example.SerializeToString()
writer.write(tf_serialized)
writer.close()

三.对生成的TFRecord文件进行解析

解析函数中首先要对对存入的feature进行分别提取,用tf.FixedLenFeature送入一个字典中

dics={}dics['label']=tf.FixedLenFeature((),dtype=tf.int64,default_value=0)dics['image']=tf.FixedLenFeature((),dtype=tf.string,default_value="")

生成字典后,我们就可以用tf中自带的parse_single_example提取指定字典中的数据

parsed_example=tf.parse_single_example(serialized=example_proto,features=dics)

对于int64类型的label数据,我们可以直接用parsed_example函数将数据取出,对于图片,由于我们一开始将其转换成为了二进制数据的原因,此时我们需要用解码函数decode_raw将其恢复

image=tf.decode_raw(parsed_example['image'],out_type=tf.uint8)
label=parsed_example['label']

四.读取数据

取出数据以后,我们就可以通过函数来实现数据生成器

dataset=tf.data.TFRecordDataset(filenames=filenames)
new_dataset=dataset.map(A)

其中A是我们生成的解析函数名,对于指定生成的dataset生成器,我们可以对其指定batch、prefetch的操作

  • shuffle()对生成器进行打乱
  • prefetch(1)对生成器进行并行CPU处理,为GPU处理准备数据
  • make_one_shot_iterator()获得生成器迭代器

next_element=iterator.get_next() 获得下一个迭代器

最后,我们在session中run这个返回的迭代器即可获得我们想要的输入图片和label(由于我们的字典中有两个key,所以要用list把这两个迭代器中的元素括起来,分别计算和赋值)

batch_images,batch_labels=sess.run([next_element[0],next_element[1]])

(个人思路记录,勿喷)

利用Tensorflow中的TFRecord生成与读取图片相关推荐

  1. Tensorflow中使用tfrecord,队列方式读取数据

    博客地址:https://blog.csdn.net/liangjun_feng/article/details/79698809 标准TensorFlow格式 有一种保存记录的方法可以允许你讲任意的 ...

  2. python如何读取tfrecord_Tensorflow(一) TFRecord生成与读取

    TFRecord生成 一.为什么使用TFRecord? 正常情况下我们训练文件夹经常会生成 train, test 或者val文件夹,这些文件夹内部往往会存着成千上万的图片或文本等文件,这些文件被散列 ...

  3. 在网页中动态的生成一个gif图片

    作者: love.net 大家知道股票网站的K线图是动态生成的定时刷新PHP 就有动态生成图片的功能 那么怎样用asp.net在网页中动态的生成一个图片呢? 下面我要举的例子是动态的生成一个图片显示当 ...

  4. MVC中根据后台绝对路径读取图片并显示在IMG中

    数据库存取图片并在MVC3中显示在View中 根据路径读取图片: byte[] img = System.IO.File.ReadAllBytes(@"d:\xxxx.jpg"); ...

  5. img src请求后台值值能判断_MVC中根据后台绝对路径读取图片并显示在IMG中

    简介:在有些情况下需要将图片转换为二进制流存放在数据库中,当显示时再从数据库中读出来显示在界面上. 本文简单介绍数据库中图片的存取方法,并在MVC3中显示在Razor视图中.仅供初学者参考学习. 1. ...

  6. 在jsp中通过I/O流方式读取图片并展示到页面

    之前在做一个项目时用到了图片上传并立即展示到页面浏览,而且图片存放在硬盘上的一个文件夹中而非在工程与数据库中,这就会出现一个问题,如果不是在开发程序环境中访问图片页面,则会出现图片不能展示情况,原因很 ...

  7. Tensorflow中的TFRecord、Queue和多线程

    Queues, Threads, and Reading Data 输入管线 如果训练数据量较小,Tesnsorflow会把数据一次性加载到内存当中.如果数据过于庞大,Tesorflow需要把存储到硬 ...

  8. 利用hibernate中的SchemaExport生成数据表

    NHibernate之旅(19):初探SchemaExport工具使用 这篇文章是介绍,NHibernate的好文,适合正在研究该框架的朋友,本帖只做转载处理,而且根据作者的要求在文章中贴出相关链接, ...

  9. 拼接php图片路径,利用ThinkPHP5中的获取器,实现图片URL拼接

    图片URL地址要保存为相对路径 存在数据库中的图片路径数据,要存放为相对路径,不要写死.这一点很重要 +----+---------------------------+------+-------- ...

最新文章

  1. 【转】Unity3D将来时:IL2CPP(上)
  2. Hadoop:eclipse配置hadoop-eclipse-plugin(版本hadoop2.7.3)
  3. 利python写用赌博游戏函数版赏析:
  4. Python 数据科学手册 5.8 决策树和随机森林
  5. 宝塔面板ab模板建站_使用宝塔面板创建网站,安装网站程序,wordpress建站
  6. myEclipse的subversion插件Subclipse
  7. 第一章:T-SQL查询与编程基础
  8. Java程序员必会的工具库,让你的代码量减少90%!
  9. python写math函数_pythonmathcot函数_Matplotlib 编写数学表达式
  10. 推荐一个ajax控件项目 ajax data control
  11. 蓝桥杯 BASIC-10 十进制转十六进制
  12. 项目管理相关的考试认证及证书价值介绍
  13. item_cat_get - 获得淘宝商品类目
  14. 更改eclipse字体
  15. YALMIP学习总结
  16. kdj指标主要看哪个值_史上最全KDJ指标用法详解,学习KDJ指标看这一篇就够了
  17. 公文排版插件for Word/WPS【快点公文助手——让公文排版更快一点】
  18. C++基础数论—————容斥原理
  19. python解析mht文件_[原创].mht文件图片解析工具
  20. tds for mysql_tds数据库是什么-和tds数据库相关的问题-阿里云开发者社区

热门文章

  1. python模块(转自Yuan先生)
  2. Android下音频进行转码
  3. 世界大学排名(前100名)一览表
  4. Linux向日葵同步剪贴板,Windows远程桌面可双向复制粘贴图片了,向日葵客户端9.0.3更新...
  5. oracle 手机客户端_Oracle 11g客户端
  6. 电子对抗(雷达)发展现状
  7. 全国产!全志T3+Logos FPGA核心板(4核ARM Cortex-A7)规格书
  8. 通过矩阵镜头实现敏捷
  9. 计算机视觉常见的十种图像标注方法
  10. JAVA高级面试题——2019