利用Tensorflow中的TFRecord生成与读取图片
本人是深度学习的爱好者,最近在参加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生成与读取图片相关推荐
- Tensorflow中使用tfrecord,队列方式读取数据
博客地址:https://blog.csdn.net/liangjun_feng/article/details/79698809 标准TensorFlow格式 有一种保存记录的方法可以允许你讲任意的 ...
- python如何读取tfrecord_Tensorflow(一) TFRecord生成与读取
TFRecord生成 一.为什么使用TFRecord? 正常情况下我们训练文件夹经常会生成 train, test 或者val文件夹,这些文件夹内部往往会存着成千上万的图片或文本等文件,这些文件被散列 ...
- 在网页中动态的生成一个gif图片
作者: love.net 大家知道股票网站的K线图是动态生成的定时刷新PHP 就有动态生成图片的功能 那么怎样用asp.net在网页中动态的生成一个图片呢? 下面我要举的例子是动态的生成一个图片显示当 ...
- MVC中根据后台绝对路径读取图片并显示在IMG中
数据库存取图片并在MVC3中显示在View中 根据路径读取图片: byte[] img = System.IO.File.ReadAllBytes(@"d:\xxxx.jpg"); ...
- img src请求后台值值能判断_MVC中根据后台绝对路径读取图片并显示在IMG中
简介:在有些情况下需要将图片转换为二进制流存放在数据库中,当显示时再从数据库中读出来显示在界面上. 本文简单介绍数据库中图片的存取方法,并在MVC3中显示在Razor视图中.仅供初学者参考学习. 1. ...
- 在jsp中通过I/O流方式读取图片并展示到页面
之前在做一个项目时用到了图片上传并立即展示到页面浏览,而且图片存放在硬盘上的一个文件夹中而非在工程与数据库中,这就会出现一个问题,如果不是在开发程序环境中访问图片页面,则会出现图片不能展示情况,原因很 ...
- Tensorflow中的TFRecord、Queue和多线程
Queues, Threads, and Reading Data 输入管线 如果训练数据量较小,Tesnsorflow会把数据一次性加载到内存当中.如果数据过于庞大,Tesorflow需要把存储到硬 ...
- 利用hibernate中的SchemaExport生成数据表
NHibernate之旅(19):初探SchemaExport工具使用 这篇文章是介绍,NHibernate的好文,适合正在研究该框架的朋友,本帖只做转载处理,而且根据作者的要求在文章中贴出相关链接, ...
- 拼接php图片路径,利用ThinkPHP5中的获取器,实现图片URL拼接
图片URL地址要保存为相对路径 存在数据库中的图片路径数据,要存放为相对路径,不要写死.这一点很重要 +----+---------------------------+------+-------- ...
最新文章
- 【转】Unity3D将来时:IL2CPP(上)
- Hadoop:eclipse配置hadoop-eclipse-plugin(版本hadoop2.7.3)
- 利python写用赌博游戏函数版赏析:
- Python 数据科学手册 5.8 决策树和随机森林
- 宝塔面板ab模板建站_使用宝塔面板创建网站,安装网站程序,wordpress建站
- myEclipse的subversion插件Subclipse
- 第一章:T-SQL查询与编程基础
- Java程序员必会的工具库,让你的代码量减少90%!
- python写math函数_pythonmathcot函数_Matplotlib 编写数学表达式
- 推荐一个ajax控件项目 ajax data control
- 蓝桥杯 BASIC-10 十进制转十六进制
- 项目管理相关的考试认证及证书价值介绍
- item_cat_get - 获得淘宝商品类目
- 更改eclipse字体
- YALMIP学习总结
- kdj指标主要看哪个值_史上最全KDJ指标用法详解,学习KDJ指标看这一篇就够了
- 公文排版插件for Word/WPS【快点公文助手——让公文排版更快一点】
- C++基础数论—————容斥原理
- python解析mht文件_[原创].mht文件图片解析工具
- tds for mysql_tds数据库是什么-和tds数据库相关的问题-阿里云开发者社区