tensorflow学习笔记之tfrecord文件的生成与读取


Posted in Python onMarch 31, 2021

训练模型时,我们并不是直接将图像送入模型,而是先将图像转换为tfrecord文件,再将tfrecord文件送入模型。为进一步理解tfrecord文件,本例先将6幅图像及其标签转换为tfrecord文件,然后读取tfrecord文件,重现6幅图像及其标签。
1、生成tfrecord文件

import os
import numpy as np
import tensorflow as tf
from PIL import Image

filenames = [
'images/cat/1.jpg',
'images/cat/2.jpg',
'images/dog/1.jpg',
'images/dog/2.jpg',
'images/pig/1.jpg',
'images/pig/2.jpg',]

labels = {'cat':0, 'dog':1, 'pig':2}

def int64_feature(values):
	if not isinstance(values, (tuple, list)):
		values = [values]
	return tf.train.Feature(int64_list=tf.train.Int64List(value=values))

def bytes_feature(values):
	return tf.train.Feature(bytes_list=tf.train.BytesList(value=[values]))

with tf.Session() as sess:
	output_filename = os.path.join('images/train.tfrecords')
	with tf.python_io.TFRecordWriter(output_filename) as tfrecord_writer:
		for filename in filenames:
			#读取图像
			image_data = Image.open(filename)
			#图像灰度化
			image_data = np.array(image_data.convert('L'))
			#将图像转化为bytes
			image_data = image_data.tobytes()
			#读取label
			label = labels[filename.split('/')[-2]]
			#生成protocol数据类型
			example = tf.train.Example(features=tf.train.Features(feature={'image': bytes_feature(image_data),
																			'label': int64_feature(label)}))
			tfrecord_writer.write(example.SerializeToString())

2、读取tfrecord文件

import tensorflow as tf
import matplotlib.pyplot as plt
from PIL import Image

# 根据文件名生成一个队列
filename_queue = tf.train.string_input_producer(['images/train.tfrecords'])
reader = tf.TFRecordReader()
# 返回文件名和文件
_, serialized_example = reader.read(filename_queue)
features = tf.parse_single_example(serialized_example, 
									features={'image': tf.FixedLenFeature([], tf.string), 
												'label': tf.FixedLenFeature([], tf.int64)})
# 获取图像数据
image = tf.decode_raw(features['image'], tf.uint8)
# 恢复图像原始尺寸[高,宽]
image = tf.reshape(image, [60, 160])
# 获取label
label = tf.cast(features['label'], tf.int32)

with tf.Session() as sess:
	# 创建一个协调器,管理线程
	coord = tf.train.Coordinator()
	# 启动QueueRunner, 此时文件名队列已经进队
	threads = tf.train.start_queue_runners(sess=sess, coord=coord)

	for i in range(6):
		image_b, label_b = sess.run([image, label])
		img = Image.fromarray(image_b, 'L')
		plt.imshow(img)
		plt.axis('off')
		plt.show()
		print(label_b)

	# 通知其他线程关闭
	coord.request_stop()
	# 其他所有线程关闭之后,这一函数才能返回
	coord.join(threads)

到此这篇关于tensorflow学习笔记之tfrecord文件的生成与读取的文章就介绍到这了,更多相关tfrecord文件的生成与读取内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
python复制与引用用法分析
Apr 08 Python
Python判断字符串与大小写转换
Jun 08 Python
浅述python中argsort()函数的实例用法
Mar 30 Python
使用Python对Csv文件操作实例代码
May 12 Python
python爬取淘宝商品销量信息
Nov 16 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
Python从入门到精通之环境搭建教程图解
Sep 26 Python
Python如何使用函数做字典的值
Nov 30 Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 Python
PyTorch预训练Bert模型的示例
Nov 17 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
Nov 18 Python
Python中快速掌握Data Frame的常用操作
Mar 31 #Python
pycharm无法导入lxml的解决办法
python某漫画app逆向
python爬虫--selenium模块
Mar 31 #Python
【超详细】八大排序算法的各项比较以及各自特点
pandas 操作 Excel操作总结
Mar 31 #Python
字典算法实现及操作 --python(实用)
You might like
PHP中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
PHP扩展开发教程(总结)
2015/11/04 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
js中cookie的使用详细分析
2008/05/28 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
Javascript中绑定click事件的四种方式介绍
2018/10/26 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python 限制函数调用次数的实例讲解
2018/04/21 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
详解Python中第三方库Faker
2020/09/25 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
小学教育毕业生自荐信
2013/11/18 职场文书
主要负责人任命书
2014/06/06 职场文书
中学生打架检讨书
2014/10/13 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书
JavaScript分页组件使用方法详解
2021/07/26 Javascript
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript