越来越清晰的TFRecord处理图片的步骤
# 首先是模块的导入
"""
os模块是处理文件夹用的
PIL模块是用来处理图片的
"""
import tensorflow as tf
import os
from PIL import Image path = "tensorflow_application/jpg" # 这是上述文件结构的主文件夹路径
filename = os.listdir(path) # 作用是遍历path文件夹下的文件,返回的是001和002文件夹构成的一个列表
writer = tf.python_io.TFRecordWriter("tensorflow_application/train.tfrecords") # 将TFRecordWriter实例化,用于文件的写操作。其中的路径是tfrecords文件的存放路径,这个路径并不需要实现建立,代码会自动生成 for name in filename:
class_path = path + os.sep + name # 得到每一类的路径,即001文件夹和002文件夹的路径,其中的os.sep返回的是一个符号,即'//',这是路径中的一个符号而已,起到连接作用,构成此文件夹的完整路径
for img_name in os.listdir(class_path):
img_path = class_path + os.sep + img_name # 同上,得到此文件夹下的每一张图片的完整路径,用于后续的图片提取并处理
img = Image.open(img_path) # 取出图片
img = img.resize((500, 500)) # 改变图片大小,大小视具体的网络要求而定,不同的网络对输入图片的大小并不完全相同。这里我暂且将图片变为500*500的大小
img_raw = img.tobytes() # 这里将图片矩阵变为字符串形式进行存储,因为TFRecords能够保存的只能是二进制数据,因此需要将数组转换为二进制形式
# 下面是关键的步骤,将数据填入到Example协议内存块中,最终生成TFRecords文件。TFRecords文件就是通过一个包含着二进制文件的数据文件,将特征和标签进行保存便于TensorFlow读取
"""
一个tf.train.Example,即Example协议内存块,包含着若干数据特征(Features),而Features
中又包含着Feature字典。任何一个Feature中又包含着FloatList, Int64List或BytesList,本例
中使用到了其中两种数据格式,即Int64List和BytesList,需要注意的是value后跟的值需要为
列表形式,所以加上了方括号
"""
example = tf.train.Example(
features = tf.train.Features(
feature={
"label": tf.train.Feature(int64_list=tf.train.Int64List(value=[name])),
"image": tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))))
}
serialized = example.SerializeToString() # 先将样本进行序列化操作
writer.write(serialized) # 对序列化操作后的变量进行写操作,即生成最终的tfrecords文件
接下来需要做的便是读取生成的tfrecords文件,在神经网络中,需要将tfrecords文件中的image和label读取出来,然后将其传递给图。
# 使用的模块还是tensorflow
import tensorflow as tf filename = "tensorflow_application/train.tfrecords" # 这是上面生成的tfrecords文件
filename_queue = tf.train.string_input_producer([filenname]) # 建立一个队列,其中的参数为tfrecords文件的路径 reader = tf.TFRecordReader() # 实例化读操作,建立读取器
_, serialized_example = reader.read(filename_queue) # 返回文件名和文件
"""
通过parse_single_example解析器解析,将Example协议内存块解析为张量(Tensor),然后使用
解码器tf.decode_raw解码
"""
features = tf.parse_single_example(serialized_example,
features={
"label": tf.FixedLenFeature([], tf.int64),
"image": tf.FixedLenFeature([], tf.string)
})
img = tf.decode_raw(features["image"], tf.uint8) # 使用tf.decode_raw解码
img = tf.reshape(img, [500, 500, 3]) # 重构图片的大小为500*500*3 img = tf.cast(img, tf.float32) * (1. / 128) - 0.5
label = tf.cast(features["label"], tf.int32) """
上面将img和label从tfrecords文件中读取了出来,但是如果需要将数据取出供
图使用,还需要使用tf.train.shuffle_batch
shuffle_batch的主要参数为:
1. tensor: 入队队列,即上面得到的img和label,[img, label]
2. batch_size: batch的大小
3. capacity: 队列的最大容量
4. num_threads: 线程数
5. min_after_dequeue: 限制出队时队列中元素的最小个数
"""
img_batch, label_batch = tf.train.shuffle_batch([img, label], batch_size=1,
capacity=24, min_after_dequeue=1) # 将得到的img_batch, label_batch传递给需要进行递归的数据即可
原文链接:https://blog.csdn.net/cl2227619761/article/details/80107208
越来越清晰的TFRecord处理图片的步骤的更多相关文章
- 安装glue,用glue批量处理图片的步骤
glue批量处理图片:http://glue.readthedocs.io/en/latest/quickstart.html#and-why-those-css-class-names 首先需要安 ...
- Nginx安装(我觉得我这篇可能是全网最清晰的一篇安装步骤了)
原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/46aadb8f-5 ...
- 更加清晰的TFRecord格式数据生成及读取
TFRecords 格式数据文件处理流程 TFRecords 文件包含了 tf.train.Example 协议缓冲区(protocol buffer),协议缓冲区包含了特征 Features.Ten ...
- 自动化运维工具Ansible的部署步骤详解
本文来源于http://sofar.blog.51cto.com/353572/1579894,主要是看到这样一篇好文章,想留下来供各位同僚一起分享. 一.基础介绍 ================= ...
- Goodbye2014,Hello2015
正如我在研发会议上说的,总结是为了更好的计划:而计划,则是让你做事有目标,有方向:有了目标和方向,你才能真正把事情做成! 总的来说2014年可以归纳为下图: 2014年总结 一年的活动,基本可以归纳为 ...
- 【原创】机器学习之PageRank算法应用与C#实现(2)球队排名应用与C#代码
在上一篇文章:机器学习之PageRank算法应用与C#实现(1)算法介绍 中,对PageRank算法的原理和过程进行了详细的介绍,并通过一个很简单的例子对过程进行了讲解.从上一篇文章可以很快的了解Pa ...
- 漫谈可视化Prefuse(六)---改动源码定制边粗细
可视化一路走来,体会很多:博客一路写来,收获颇丰:代码一路码来,思路越来越清晰.终究还是明白了一句古话:纸上得来终觉浅,绝知此事要躬行. 跌跌撞撞整合了个可视化小tool,零零碎碎结交了众多的志同道合 ...
- [python 译] 基于面向对象的分析和设计
[python 译] 基于面向对象的分析和设计 // */ // ]]> [python 译] 基于面向对象的分析和设计 Table of Contents 1 原文地址 2 引言 2.1 ...
- Zbrush遮罩边界该怎么实现羽化和锐化
很多情况下为了雕刻制图需要,在ZBrush®中不仅要使用边缘清晰的遮罩,有时还要将遮罩边缘变得模糊,做羽化效果.那么如何在ZBrush中实现羽化遮罩效果或锐化遮罩效果,本文将做详细讲解. 若有疑问可直 ...
随机推荐
- Python--day21--复习
序列化模块总结: jison格式化输出: Serialize obj to a JSON formatted str.(字符串表示的json对象) Skipkeys:默认值是False,如果dict的 ...
- HDU 1026 BSF+优先队列+记录路径、
#include<iostream> #include<cmath> #include<cstring> #include<cstdio> #inclu ...
- jps简介
java虚拟机进程状态工具-jps 功能简介 列出指定机器上的虚拟机的进程状态 命令格式 jps [ options ] [ hostid ] 其中options选项可有 选项 作用描述 -q 只输出 ...
- SpringBoot2.X 项目使用外置绝对路径的配置文件
spring-boot-absolute-config 前言 该工程是为解决应用部署应用时指定配置文件存放位置的问题. SpringBoot项目默认加载以下位置的配置文件: ? 1 2 3 4 cla ...
- 2018-8-10-win10-uwp-绑定-OneWay-无法使用
title author date CreateTime categories win10 uwp 绑定 OneWay 无法使用 lindexi 2018-08-10 19:16:50 +0800 2 ...
- Linux 内核class_simple 接口
class_simple 接口意图是易于使用, 以至于没人会抱怨没有暴露至少一个包含设备的被 分配的号的属性. 使用这个接口只不过是一对函数调用, 没有通常的和 Linux 设备模型 关联的样板. 第 ...
- CF1214
CF1214 C题WA3发的菜鸡还能涨分 A 发现货币面值都是倍数关系,直接暴力枚举第第一种换了多少个更新答案就好了 B 按照题意模拟 C 首先,左括号的数量不等于有括号的数量一定无解 想等的话在括号 ...
- 微软软件开发技术二十年回顾-Windows DNA篇
五. Windows DNA篇 微软的Windows分布式因特网应用体系(简称Windows DNA)是微软创建新一代高适应性商业解 决方案的框架,它使公司能够充分地挖掘数字神经系统的优点.Windo ...
- cglib的动态代理
前言 jdk中的动态代理通过反射类Proxy和InvocationHandler回调接口实现,要求委托类必须实现一个接口,只能对该类接口中定义的方法实现代理,这在实际编程中有一定的局限性. cglib ...
- 使用Pandas加载数据
1.dataframe对象简述: dataframe为pandas中一种有行列索引的二维数据结构,可以看成在普通二维结构上加上行列id标记 示例为创建一个2X3的dataframe: import s ...