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 相关文章推荐
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
Python中动态创建类实例的方法
Mar 24 Python
Python下载网络小说实例代码
Feb 03 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
学生信息管理系统Python面向对象版
Jan 30 Python
使用python 写一个静态服务(实战)
Jun 28 Python
Django REST framework内置路由用法
Jul 26 Python
Django之模板层的实现代码
Sep 09 Python
安装Pycharm2019以及配置anconda教程的方法步骤
Nov 11 Python
Python线程障碍对象Barrier原理详解
Dec 02 Python
浅析Python的命名空间与作用域
Nov 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中strlen和mb_strlen函数的区别
2014/03/07 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
2019/10/12 PHP
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
原生javascript实现拖动元素示例代码
2014/09/01 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
微信小程序开发探究
2016/12/27 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
python sort、sorted高级排序技巧
2014/11/21 Python
低版本中Python除法运算小技巧
2015/04/05 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Django 拆分model和view的实现方法
2019/08/16 Python
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
基于Python 函数和方法的区别说明
2021/03/24 Python
社区三八妇女节活动总结
2015/02/06 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript
Nginx 常用配置
2022/05/15 Servers