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实现2014火车票查询代码分享
Jan 10 Python
如何解决django配置settings时遇到Could not import settings 'conf.local'
Nov 18 Python
详解在Python中处理异常的教程
May 24 Python
python开发简易版在线音乐播放器
Mar 03 Python
python对list中的每个元素进行某种操作的方法
Jun 29 Python
python批量复制图片到另一个文件夹
Sep 17 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
python实现广度优先搜索过程解析
Oct 19 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 Python
python 实现客户端与服务端的通信
Dec 23 Python
详解Python中的Lock和Rlock
Jan 26 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分页显示制作详细讲解
2006/10/09 PHP
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
jquery对表单操作2
2011/04/06 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
vue模式history下在iis中配置流程
2019/04/17 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
python控制台中实现进度条功能
2015/11/10 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
python顺序执行多个py文件的方法
2019/06/29 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
局域网标准
2016/09/10 面试题
机电一体化专业推荐信
2013/12/03 职场文书
求职简历的自我评价
2014/01/31 职场文书
推广普通话演讲稿
2014/05/23 职场文书
临床医学专业求职信
2014/08/08 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
财务总监岗位职责
2015/02/03 职场文书
《将心比心》教学反思
2016/02/23 职场文书
Python中time与datetime模块使用方法详解
2022/03/31 Python