将自己的数据集制作成TFRecord格式教程


Posted in Python onFebruary 17, 2020

在使用TensorFlow训练神经网络时,首先面临的问题是:网络的输入

此篇文章,教大家将自己的数据集制作成TFRecord格式,feed进网络,除了TFRecord格式,TensorFlow也支持其他格

式的数据,此处就不再介绍了。建议大家使用TFRecord格式,在后面可以通过api进行多线程的读取文件队列。

1. 原本的数据集

此时,我有两类图片,分别是xiansu100,xiansu60,每一类中有10张图片。

将自己的数据集制作成TFRecord格式教程

2.制作成TFRecord格式

tfrecord会根据你选择输入文件的类,自动给每一类打上同样的标签。如在本例中,只有0,1 两类,想知道文件夹名与label关系的,可以自己保存起来。

#生成整数型的属性
def _int64_feature(value):
 return tf.train.Feature(int64_list = tf.train.Int64List(value = [value]))
 
#生成字符串类型的属性
def _bytes_feature(value):
 return tf.train.Feature(bytes_list = tf.train.BytesList(value = [value]))
 
#制作TFRecord格式
def createTFRecord(filename,mapfile):
 class_map = {}
 data_dir = '/home/wc/DataSet/traffic/testTFRecord/'
 classes = {'xiansu60','xiansu100'}
 #输出TFRecord文件的地址
 
 writer = tf.python_io.TFRecordWriter(filename)
 
 for index,name in enumerate(classes):
  class_path=data_dir+name+'/'
  class_map[index] = name
  for img_name in os.listdir(class_path):
   img_path = class_path + img_name #每个图片的地址
   img = Image.open(img_path)
   img= img.resize((224,224))
   img_raw = img.tobytes()   #将图片转化成二进制格式
   example = tf.train.Example(features = tf.train.Features(feature = {
    'label':_int64_feature(index),
    'image_raw': _bytes_feature(img_raw)
   }))
   writer.write(example.SerializeToString())
 writer.close()
 
 txtfile = open(mapfile,'w+')
 for key in class_map.keys():
  txtfile.writelines(str(key)+":"+class_map[key]+"\n")
 txtfile.close()

此段代码,运行完后会产生生成的.tfrecord文件。

3. 读取TFRecord的数据,进行解析,此时使用了文件队列以及多线程

#读取train.tfrecord中的数据
def read_and_decode(filename): 
 #创建一个reader来读取TFRecord文件中的样例
 reader = tf.TFRecordReader()
 #创建一个队列来维护输入文件列表
 filename_queue = tf.train.string_input_producer([filename], shuffle=False,num_epochs = 1)
 #从文件中读出一个样例,也可以使用read_up_to一次读取多个样例
 _,serialized_example = reader.read(filename_queue)
#  print _,serialized_example
 
 #解析读入的一个样例,如果需要解析多个,可以用parse_example
 features = tf.parse_single_example(
 serialized_example,
 features = {'label':tf.FixedLenFeature([], tf.int64),
    'image_raw': tf.FixedLenFeature([], tf.string),})
 #将字符串解析成图像对应的像素数组
 img = tf.decode_raw(features['image_raw'], tf.uint8)
 img = tf.reshape(img,[224, 224, 3]) #reshape为128*128*3通道图片
 img = tf.image.per_image_standardization(img)
 labels = tf.cast(features['label'], tf.int32)
 return img, labels

4. 将图片几个一打包,形成batch

def createBatch(filename,batchsize):
 images,labels = read_and_decode(filename)
 
 min_after_dequeue = 10
 capacity = min_after_dequeue + 3 * batchsize
 
 image_batch, label_batch = tf.train.shuffle_batch([images, labels], 
              batch_size=batchsize, 
              capacity=capacity, 
              min_after_dequeue=min_after_dequeue
              )
 
 label_batch = tf.one_hot(label_batch,depth=2)
 return image_batch, label_batch

5.主函数

if __name__ =="__main__":
 #训练图片两张为一个batch,进行训练,测试图片一起进行测试
 mapfile = "/home/wc/DataSet/traffic/testTFRecord/classmap.txt"
 train_filename = "/home/wc/DataSet/traffic/testTFRecord/train.tfrecords"
#  createTFRecord(train_filename,mapfile)
 test_filename = "/home/wc/DataSet/traffic/testTFRecord/test.tfrecords"
#  createTFRecord(test_filename,mapfile)
 image_batch, label_batch = createBatch(filename = train_filename,batchsize = 2)
 test_images,test_labels = createBatch(filename = test_filename,batchsize = 20)
 with tf.Session() as sess:
  initop = tf.group(tf.global_variables_initializer(),tf.local_variables_initializer())
  sess.run(initop)
  coord = tf.train.Coordinator()
  threads = tf.train.start_queue_runners(sess = sess, coord = coord)
 
  try:
   step = 0
   while 1:
    _image_batch,_label_batch = sess.run([image_batch,label_batch])
    step += 1
    print step
    print (_label_batch)
  except tf.errors.OutOfRangeError:
   print (" trainData done!")
   
  try:
   step = 0
   while 1:
    _test_images,_test_labels = sess.run([test_images,test_labels])
    step += 1
    print step
 #     print _image_batch.shape
    print (_test_labels)
  except tf.errors.OutOfRangeError:
   print (" TEST done!")
  coord.request_stop()
  coord.join(threads)

此时,生成的batch,就可以feed进网络了。

以上这篇将自己的数据集制作成TFRecord格式教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python自定义类并使用的方法
May 07 Python
Python定时执行之Timer用法示例
May 27 Python
使用Flask集成bootstrap的方法
Jul 24 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
python conda操作方法
Sep 11 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 Python
Python系统公网私网流量监控实现流程
Nov 23 Python
浅析Python的命名空间与作用域
Nov 25 Python
python 爬取小说并下载的示例
Dec 07 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 Python
tensorflow 实现数据类型转换
Feb 17 #Python
Django Haystack 全文检索与关键词高亮的实现
Feb 17 #Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 #Python
python itsdangerous模块的具体使用方法
Feb 17 #Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 #Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
Feb 17 #Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 #Python
You might like
整合了前面的PHP数据库连接类~~做成一个分页类!
2006/11/25 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
Dom在ajax技术中的作用说明
2010/10/25 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
Python实现购物程序思路及代码
2017/07/24 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
20行python代码实现人脸识别
2019/05/05 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
中级会计职业生涯规划书
2014/03/01 职场文书
开学寄语大全
2014/04/08 职场文书
计划生育宣传标语
2014/06/21 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
党员个人自我评价
2015/03/03 职场文书
2015年档案管理工作总结
2015/04/08 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers