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进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
python对配置文件.ini进行增删改查操作的方法示例
Jul 28 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
Python实现矩阵相乘的三种方法小结
Jul 26 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
Python过滤序列元素的方法
Jul 31 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 Python
python中if嵌套命令实例讲解
Feb 25 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 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中读取和写入WORD文档的代码
2008/04/09 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
IE浏览器打印的页眉页脚设置解决方法
2009/12/08 Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
详解Vue.directive 自定义指令
2019/03/27 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
python递归计算N!的方法
2015/05/05 Python
Python实现八大排序算法
2016/08/13 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
Python格式化日期时间操作示例
2018/06/28 Python
Python 3.8 新功能全解
2019/07/25 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
python在不同条件下的输入与输出
2020/02/13 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
费用会计岗位职责
2014/01/01 职场文书
上班睡觉检讨书
2014/01/09 职场文书
股东出资证明书范例
2014/10/04 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL