tensorflow tfrecoder read write

  1 #  write in tfrecord
  2 import tensorflow as tf
  3 import os
  4 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
  5 
  6 
  7 FLAGS = tf.app.flags.FLAGS
  8 tf.app.flags.DEFINE_string("tfrecords_dir", "./tfrecords/captcha.tfrecords", "验证码tfrecords文件")
  9 tf.app.flags.DEFINE_string("captcha_dir", "../data/Genpics/", "验证码图片路径")
 10 tf.app.flags.DEFINE_string("letter", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "验证码字符的种类")
 11 
 12 
 13 def dealwithlabel(label_str):
 14 
 15     # 构建字符索引 {0:'A', 1:'B'......}
 16     num_letter = dict(enumerate(list(FLAGS.letter)))
 17 
 18     # 键值对反转 {'A':0, 'B':1......}
 19     letter_num = dict(zip(num_letter.values(), num_letter.keys()))
 20 
 21     print(letter_num)
 22 
 23     # 构建标签的列表
 24     array = []
 25 
 26     # 给标签数据进行处理[[b"NZPP"]......]
 27     for string in label_str:
 28 
 29         letter_list = []# [1,2,3,4]
 30 
 31         # 修改编码,bytes --> string
 32         for letter in string.decode('utf-8'):
 33             letter_list.append(letter_num[letter])
 34 
 35         array.append(letter_list)
 36 
 37     # [[13, 25, 15, 15], [22, 10, 7, 10], [22, 15, 18, 9], [16, 6, 13, 10], [1, 0, 8, 17], [0, 9, 24, 14].....]
 38     print(array)
 39 
 40     # 将array转换成tensor类型
 41     label = tf.constant(array)
 42 
 43     return label
 44 
 45 
 46 def get_captcha_image():
 47     """
 48     获取验证码图片数据
 49     :param file_list: 路径+文件名列表
 50     :return: image
 51     """
 52     # 构造文件名
 53     filename = []
 54 
 55     for i in range(6000):
 56         string = str(i) + ".jpg"
 57         filename.append(string)
 58 
 59     # 构造路径+文件
 60     file_list = [os.path.join(FLAGS.captcha_dir, file) for file in filename]
 61 
 62     # 构造文件队列
 63     file_queue = tf.train.string_input_producer(file_list, shuffle=False)
 64 
 65     # 构造阅读器
 66     reader = tf.WholeFileReader()
 67 
 68     # 读取图片数据内容
 69     key, value = reader.read(file_queue)
 70 
 71     # 解码图片数据
 72     image = tf.image.decode_jpeg(value)
 73 
 74     image.set_shape([20, 80, 3])
 75 
 76     # 批处理数据 [6000, 20, 80, 3]
 77     image_batch = tf.train.batch([image], batch_size=6000, num_threads=1, capacity=6000)
 78 
 79     return image_batch
 80 
 81 
 82 def get_captcha_label():
 83     """
 84     读取验证码图片标签数据
 85     :return: label
 86     """
 87     file_queue = tf.train.string_input_producer(["../data/Genpics/labels.csv"], shuffle=False)
 88 
 89     reader = tf.TextLineReader()
 90 
 91     key, value = reader.read(file_queue)
 92 
 93     records = [[1], ["None"]]
 94 
 95     number, label = tf.decode_csv(value, record_defaults=records)
 96 
 97     # [["NZPP"], ["WKHK"], ["ASDY"]]
 98     label_batch = tf.train.batch([label], batch_size=6000, num_threads=1, capacity=6000)
 99 
100     return label_batch
101 
102 
103 def write_to_tfrecords(image_batch, label_batch):
104     """
105     将图片内容和标签写入到tfrecords文件当中
106     :param image_batch: 特征值
107     :param label_batch: 标签纸
108     :return: None
109     """
110     # 转换类型
111     label_batch = tf.cast(label_batch, tf.uint8)
112 
113     print(label_batch)
114 
115     # 建立TFRecords 存储器
116     writer = tf.python_io.TFRecordWriter(FLAGS.tfrecords_dir)
117 
118     # 循环将每一个图片上的数据构造example协议块,序列化后写入
119     for i in range(6000):
120         # 取出第i个图片数据,转换相应类型,图片的特征值要转换成字符串形式
121         image_string = image_batch[i].eval().tostring()
122 
123         # 标签值,转换成整型
124         label_string = label_batch[i].eval().tostring()
125 
126         # 构造协议块
127         example = tf.train.Example(features=tf.train.Features(feature={
128             "image": tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_string])),
129             "label": tf.train.Feature(bytes_list=tf.train.BytesList(value=[label_string]))
130         }))
131 
132         writer.write(example.SerializeToString())
133 
134     # 关闭文件
135     writer.close()
136 
137     return None
138 
139 
140 if __name__ == "__main__":
141 
142     # 获取验证码文件当中的图片
143     image_batch = get_captcha_image()
144 
145     # 获取验证码文件当中的标签数据
146     label = get_captcha_label()
147 
148     print(image_batch, label)
149 
150     with tf.Session() as sess:
151 
152         coord = tf.train.Coordinator()
153 
154         threads = tf.train.start_queue_runners(sess=sess, coord=coord)
155 
156         # 获取tensor里面的值
157         label_str = sess.run(label)
158 
159         print(label_str)
160 
161         # 处理字符串标签到数字张量
162         label_batch = dealwithlabel(label_str)
163 
164         print(label_batch)
165 
166         # 将图片数据和内容写入到tfrecords文件当中
167         write_to_tfrecords(image_batch, label_batch)
168 
169         coord.request_stop()
170 
171         coord.join(threads)
 1 # read tfrecords
 2 def read_and_decode():
 3     """
 4     读取验证码数据API
 5     :return: image_batch, label_batch
 6     """
 7     # 1、构建文件队列
 8     file_queue = tf.train.string_input_producer([FLAGS.captcha_dir])
 9 
10     # 2、构建阅读器,读取文件内容,默认一个样本
11     reader = tf.TFRecordReader()
12 
13     # 读取内容
14     key, value = reader.read(file_queue)
15 
16     # tfrecords格式example,需要解析
17     features = tf.parse_single_example(value, features={
18         "image": tf.FixedLenFeature([], tf.string),
19         "label": tf.FixedLenFeature([], tf.string),
20     })
21 
22     # 解码内容,字符串内容
23     # 1、先解析图片的特征值
24     image = tf.decode_raw(features["image"], tf.uint8)
25     # 1、先解析图片的目标值
26     label = tf.decode_raw(features["label"], tf.uint8)
27 
28     # print(image, label)
29 
30     # 改变形状
31     image_reshape = tf.reshape(image, [20, 80, 3])
32 
33     label_reshape = tf.reshape(label, [4])
34 
35     print(image_reshape, label_reshape)
36 
37     # 进行批处理,每批次读取的样本数 100, 也就是每次训练时候的样本
38     image_batch, label_btach = tf.train.batch([image_reshape, label_reshape], batch_size=FLAGS.batch_size, num_threads=1, capacity=FLAGS.batch_size)
39 
40     print(image_batch, label_btach)
41     return image_batch, label_btach

# write flags
FLAGS = tf.app.flags.FLAGS
tf.app.flags.DEFINE_string("tfrecords_dir", "./tfrecords/captcha.tfrecords", "验证码tfrecords文件")
tf.app.flags.DEFINE_string("captcha_dir", "../data/Genpics/", "验证码图片路径")
tf.app.flags.DEFINE_string("letter", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "验证码字符的种类")
# read flags
tf.app.flags.DEFINE_string("captcha_dir", "./tfrecords/captcha.tfrecords", "验证码数据的路径")
tf.app.flags.DEFINE_integer("batch_size", 100, "每批次训练的样本数")
tf.app.flags.DEFINE_integer("label_num", 4, "每个样本的目标值数量")
tf.app.flags.DEFINE_integer("letter_num", 26, "每个目标值取的字母的可能心个数")

 

转载于:https://www.cnblogs.com/jiujue/p/11453779.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux管道举例理解

linux管道举例理解一、管道的定义:“|”二、查找2.1统计当前目录下有多少个文件2.2查看当前目录下的前n(3)个文件2.3查看wang.txt文件包含i的字符行2.4查看内存使用情况2.5查询进程三、更改https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎…

Sublime Text 3安装GoSublime

GoLand IDE工具虽然在编程时很好用,但是在使用中也有个问题,有时我们可能只是写一个简单的脚本来测试,对于我而言在打开IDE太重量级了,所以捣鼓了GoSublime工具来满足平时最基本的需求。 下载GoSublime源码 官方地址:h…

计算机二进制、八进制、十进制、十六进制的转换(计算机基础进制的转换)

常用进制转换1.进制特点2.十进制与二进制的转换2.1对应关系2.2举例一:二进制1011转换十进制2.3举例二:二进制10111转换十进制2.3举例三:十进制45转换成二进制2.4举例四:十进制小数0.25转换成二进制3.八进制与二进制3.1对应关系3.2…

sys.dm_exec_query_stats的total_worker_time的单位是微秒还是毫秒

该视图sys.dm_exec_query_stats存放的就是当前所有执行计划的详细信息,比如某条执行计划共占CPU多少等等。因为该视图对编译次数、占用CPU资源总量、执行次数等都进行了详细的记录,所以,可以说是优化 DB服务器CPU 的一大利器。 那么如下关于C…

Pycharm如何导入python文件,及出现报错解决办法

导入及解决报错导入py文件解决报错问题https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请注明出处(…

快速排序算法理解-python

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录快速排序定义举例代码快速排序定义 定义一个基准值&a…

HTTP协议理解——计算机网络

http一、概念传输流程HTTP请求/应答应的步骤如下:二、特点三、工作原理四、URL4.1定义4.2语法五、状态码5.1http常见状态码5.2状态码分类5.3常用端口号一、概念 1.http(超文本传输协议)是一种用于从WWW服务器传输超文本到本地浏览器的传输协议。 2.涉及两个对象&am…

AutoCAD2013 以上利用AccoreConsole+ c# NetApi Windows Froms 封装

1# 封装类 1 public static class CmdHelper2 {3 /// <summary>4 /// 调用AutoCAD 安装目录下的AccoreConsole.exe来实现批量处理图纸(Net Api dll)5 /// </summary>6 /// <param name"cmsStr">NetApi中注册…

广域网、局域网和城域网的理解

定义 局域网&#xff1a;Local Area Network&#xff1b;简称LAN&#xff0c;是一个可连接家庭、学校、企业等有限区域的计算机网络 城域网&#xff1a;Metropolitan Area Network&#xff1b;简称MAN&#xff0c;是一个城市范围内所建立的计算机通信网 广域网&#xff1a;Wid…

C# 的一些便捷用法

分割字符串 这样可以用一串字符串分割并且分为数组 string[] arr System.Text.RegularExpressions.Regex.Split(str, "\r\n"); dynamic 动态类型 List<dynamic> 可以自定义内容并绑定列 List<dynamic> dy new List<dynamic>(); dy.Add(new{Cus…

队列与栈结构的相同点与不同点

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

SQL Server 输出 XML

一、概述 SELECT 查询将结果作为行集返回。在 SQL 查询中指定 FOR XML 子句&#xff0c;从而将该查询的正式结果作为 XML 来检索。FOR XML 子句可以用在顶级查询和子查询中。顶级 FOR XML 子句只能用在 SELECT 语句中。而在子查询中&#xff0c;FOR XML 可以用在 INSERT、UPDAT…

linux重定向输出命令

目录一、符号二、“>”举例2.1举例一2.2举例二三、“>>”举例3.1举例一3.2举例二https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#x…

python面向对象基础之类与实例

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

微信小程序进度条

<button classdown-img bindtapdownImg data-scr{{imageUrl}}>下载图片{{progress}}</button> downImg: function (e) {var _this this;// 获取图片地址(http://www.playsort.cn/...)//var img e.currentTarget.dataset.src;//var img ../pic/U1513P28T52D3414F…

mysql10.3修改默认存储路径

版本为10.3的用该种方式修改&#xff1a; 创建/data/mysql目录 mkdir -p /data/mysql 给这个目录至少要附加读写权限 chmod 777 /data/mysql -r 把mariadb服务停掉 systemctl stop mariadb 把/var/lib/mysql整个目录复制到新路径下 cp -r /var/lib/mysql/* /data/mysql 编辑ma…

计算机硬件系统和软件系统

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

修改mysql锁空间大小

A. 单次生效设置 进入mysql命令 mysql -uroot -p show variables like "%_buffer%";(不要忘记带;号&#xff0c;没有;号表示一条语句没有结束) 默认的innodb_buffer_pool_size8M tmp_table_size 4G max_heap_table_size 256M innodb_file_format Barracuda defa…

TypeError: ‘NoneType‘ object is not callable--python报错解决办法

报错为 翻译过来为&#xff1a;TypeError:“NoneType”对象不可调用 代码&#xff1a; def bibao_one():Jay "哎哟不错哦"def bibao_two():print(Jay)return bibao_two()#执行闭包 execute bibao_one()execute()我们在执行调用函数的时候&#xff0c;把括号去掉就…

洛谷 P2384 最短路题解

题目背景 狗哥做烂了最短路&#xff0c;突然机智的考了Bosh一道&#xff0c;没想到把Bosh考住了...你能帮Bosh解决吗&#xff1f; 他会给你100000000000000000000000000000000000%10金币w 题目描述 给定n个点的带权有向图&#xff0c;求从1到n的路径中边权之积最小的简单路径。…