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 相关文章推荐
tensorflow实现KNN识别MNIST
Mar 12 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
python制作mysql数据迁移脚本
Jan 01 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
详解Django admin高级用法
Nov 06 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
Nov 11 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
pycharm实现在子类中添加一个父类没有的属性
Mar 12 Python
python开根号实例讲解
Aug 30 Python
python实现快速文件格式批量转换的方法
Oct 16 Python
python函数超时自动退出的实操方法
Dec 28 Python
python os.listdir()乱码解决方案
Jan 31 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 5.0对象模型深度探索之绑定
2006/09/05 PHP
php中的注释、变量、数组、常量、函数应用介绍
2012/11/16 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
PHP实现远程下载文件到本地
2015/05/17 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
剖析Angular Component的源码示例
2018/03/23 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
全球最大的服务市场:Fiverr
2017/01/03 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
城市规划应届生推荐信
2014/09/08 职场文书
信用卡工资证明范本
2014/10/17 职场文书
个人收入证明格式
2015/06/24 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL