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 相关文章推荐
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
Python中使用MELIAE分析程序内存占用实例
Feb 18 Python
关于Python中异常(Exception)的汇总
Jan 18 Python
Pandas Shift函数的基础入门学习笔记
Nov 16 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
详解Python中is和==的区别
Mar 21 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
Dec 31 Python
pytorch 修改预训练model实例
Jan 18 Python
python3通过qq邮箱发送邮件以及附件
May 20 Python
Django 如何实现文件上传下载
Apr 08 Python
python 网络编程要点总结
Jun 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
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
php设计模式 Composite (组合模式)
2011/06/26 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
php生成RSS订阅的方法
2015/02/13 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
PHP实现搜索相似图片
2015/09/22 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
基于jQuery的倒计时插件代码
2011/05/07 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
vant实现购物车功能
2020/06/29 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
python通过自定义isnumber函数判断字符串是否为数字的方法
2015/04/23 Python
python-str,list,set间的转换实例
2018/06/27 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
电子商务助理求职自荐信
2014/04/10 职场文书
自我推荐信范文
2014/05/09 职场文书
在校实习生求职信
2014/06/18 职场文书
2016年教代会开幕词
2016/03/04 职场文书
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL