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实现类似ftp传输文件的网络程序示例
Apr 08 Python
Python的垃圾回收机制深入分析
Jul 16 Python
归纳整理Python中的控制流语句的知识点
Apr 14 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
python实现事件驱动
Nov 21 Python
python实现QQ批量登录功能
Jun 19 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
使用Django搭建网站实现商品分页功能
May 22 Python
Keras设置以及获取权重的实现
Jun 19 Python
Python函数对象与闭包函数
Apr 13 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
php addslashes 函数详细分析说明
2009/06/23 PHP
joomla内置的表单验证功能使用方法
2010/06/11 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
载入进度条 效果
2006/07/08 Javascript
js内置对象 学习笔记
2011/08/01 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
2013/06/08 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
介绍Java的内部类
2012/10/27 面试题
天网面试题
2013/04/07 面试题
护士实习自我鉴定
2013/10/22 职场文书
地质灾害防治方案
2014/05/14 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
政风行风建设整改方案
2014/10/27 职场文书
劳动仲裁调解书
2015/05/20 职场文书
爱国影片观后感
2015/06/18 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书