将自己的数据集制作成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中的私有属性
Aug 21 Python
python实现在windows服务中新建进程的方法
Jun 30 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
tensorflow实现简单的卷积神经网络
May 24 Python
使用python3构建文件传输的方法
Feb 13 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
你可能不知道的Python 技巧小结
Jan 29 Python
Jupyter notebook如何实现指定浏览器打开
May 13 Python
python爬虫用mongodb的理由
Jul 28 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 Python
Lombok插件安装(IDEA)及配置jar包使用详解
Nov 04 Python
pycharm 快速解决python代码冲突的问题
Jan 15 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
BBS(php & mysql)完整版(五)
2006/10/09 PHP
PHP技术开发技巧分享
2010/03/23 PHP
php中实现记住密码自动登录的代码
2011/03/02 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
python多重继承实例
2014/10/11 Python
matplotlib中legend位置调整解析
2017/12/19 Python
Python3.6安装及引入Requests库的实现方法
2018/01/24 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
this关键字的作用
2016/01/30 面试题
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
小学生环保倡议书
2014/05/15 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
心得体会格式及范文
2016/01/25 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书