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对象及面向对象技术详解
Jul 19 Python
Ubuntu安装Jupyter Notebook教程
Oct 18 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
Nov 29 Python
Python 中的Selenium异常处理实例代码
May 03 Python
python之拟合的实现
Jul 19 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
Jan 06 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 Python
Python爬虫之爬取哔哩哔哩热门视频排行榜
Apr 28 Python
pytorch常用数据类型所占字节数对照表一览
May 17 Python
Python实现双向链表基本操作
May 25 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从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
js动态切换图片的方法
2015/01/20 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
python实现的登录和操作开心网脚本分享
2014/07/09 Python
Python3.2中Print函数用法实例详解
2015/05/19 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Python学习入门之区块链详解
2017/07/25 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
幼儿园新学期寄语
2014/01/18 职场文书
中班开学寄语
2014/04/04 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
商场消防安全责任书
2014/07/29 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书