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 相关文章推荐
Web服务器框架 Tornado简介
Jul 16 Python
Python学习笔记之os模块使用总结
Nov 03 Python
Python中用于去除空格的三个函数的使用小结
Apr 07 Python
python 网络编程常用代码段
Aug 28 Python
python利用拉链法实现字典方法示例
Mar 25 Python
python利用lxml读写xml格式的文件
Aug 10 Python
详解flask入门模板引擎
Jul 18 Python
win10环境下配置vscode python开发环境的教程详解
Oct 16 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 Python
python中id函数运行方式
Jul 03 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
Oct 15 Python
pandas中关于apply+lambda的应用
Feb 28 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转成EXE文件
2006/10/09 PHP
PHP面向对象法则
2012/02/23 PHP
php+highchats生成动态统计图
2014/05/21 PHP
详解PHP的Yii框架中的Controller控制器
2016/03/29 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
2016/05/30 Javascript
JS小数运算出现多为小数问题的解决方法
2016/06/02 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
Node.js实现文件上传
2016/07/05 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
H5实现仿flash效果的实现代码
2017/09/29 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
python+POP3实现批量下载邮件附件
2018/06/19 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
Linux文件操作命令都有哪些
2015/02/27 面试题
企业宣传策划方案
2014/05/29 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
工作散漫检讨书
2014/09/16 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
批评与自我批评范文
2014/10/15 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
工作表扬信
2015/01/17 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
无罪辩护词范文
2015/05/21 职场文书
2015毕业设计工作总结
2015/07/24 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL