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获取Linux系统下的本机IP地址代码分享
Nov 07 Python
Python实现基于权重的随机数2种方法
Apr 28 Python
Python中类的初始化特殊方法
Dec 01 Python
django中静态文件配置static的方法
May 20 Python
python3之模块psutil系统性能信息使用
May 30 Python
python实现批量图片格式转换
Jun 16 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
Python telnet登陆功能实现代码
Apr 16 Python
Python实现进度条和时间预估的示例代码
Jun 02 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 Python
详解MindSpore自定义模型损失函数
Jun 30 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中SQL注入攻击与XSS攻击
2012/06/10 PHP
php数组去重的函数代码
2013/02/03 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
2013/07/17 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
python3音乐播放器简单实现代码
2020/04/20 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
Python标准模块--ContextManager上下文管理器的具体用法
2017/11/27 Python
python 命名规范知识点汇总
2020/02/14 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
电子商务网站的创业计划书
2014/01/05 职场文书
服务理念口号
2014/06/11 职场文书
2016公司年会通知范文
2015/04/25 职场文书
九年级历史教学反思
2016/02/19 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
Python实现文字pdf转换图片pdf效果
2022/04/03 Python
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL
pandas中pd.groupby()的用法详解
2022/06/16 Python