将自己的数据集制作成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实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
Python写的Discuz7.2版faq.php注入漏洞工具
Aug 06 Python
Python中用altzone()方法处理时区的教程
May 22 Python
Python实现文件按照日期命名的方法
Jul 09 Python
Python简单实现控制电脑的方法
Jan 22 Python
python redis 删除key脚本的实例
Feb 19 Python
Python字符串的一些操作方法总结
Jun 10 Python
django框架自定义模板标签(template tag)操作示例
Jun 24 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
基于Python测试程序是否有错误
May 16 Python
Django之腾讯云短信的实现
Jun 12 Python
浅谈Python中的函数(def)及参数传递操作
May 25 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的Laravel框架中的event事件操作
2016/03/21 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
vue生命周期的探索
2019/04/03 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
python中redis的安装和使用
2016/12/04 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
Python 加密与解密小结
2018/12/06 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
python flask中动态URL规则详解
2019/11/22 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
公司法人授权委托书范本
2014/09/12 职场文书
增值税发票丢失证明
2015/06/19 职场文书
入学证明
2015/06/23 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
同学联谊会邀请函
2019/06/24 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python