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的Flask框架中web表单的教程
Apr 20 Python
python实现红包裂变算法
Feb 16 Python
PyCharm代码回滚,恢复历史版本的解决方法
Oct 22 Python
python程序封装为win32服务的方法
Mar 07 Python
python实现简单日期工具类
Apr 24 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
关于Numpy数据类型对象(dtype)使用详解
Nov 27 Python
pytorch中torch.max和Tensor.view函数用法详解
Jan 03 Python
详解Python 重学requests发起请求的基本方式
Feb 07 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
python基于pexpect库自动获取日志信息
Feb 01 Python
Python打包为exe详细教程
May 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
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
JavaScript继承方式实例
2010/10/29 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
javascript ie6兼容position:fixed实现思路
2013/04/01 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
vue组件实例解析
2017/01/10 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
Vue使用lodop实现打印小结
2019/07/06 Javascript
Node.js 实现抢票小工具 & 短信通知提醒功能
2019/10/22 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python中的字典与成员运算符初步探究
2015/10/13 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
Pyqt5实现英文学习词典
2019/06/24 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
python异常处理try except过程解析
2020/02/03 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
外企测试工程师面试题
2015/02/01 面试题
年度考核自我鉴定
2013/11/09 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
优秀团员个人总结
2015/02/26 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
民事代理词范文
2015/05/25 职场文书
关于React Native 无法链接模拟器的问题
2021/06/21 Javascript