将自己的数据集制作成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 相关文章推荐
Python2.7读取PDF文件的方法示例
Jul 13 Python
python利用lxml读写xml格式的文件
Aug 10 Python
python实现自动发送报警监控邮件
Jun 21 Python
利用Python如何制作好玩的GIF动图详解
Jul 11 Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
python opencv实现图像边缘检测
Apr 29 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
Django 开发环境配置过程详解
Jul 18 Python
解决pytorch DataLoader num_workers出现的问题
Jan 14 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
Jul 28 Python
教你如何用python开发一款数字推盘小游戏
Apr 14 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和ACCESS写聊天室(五)
2006/10/09 PHP
php xml实例 留言本
2009/03/20 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
destoon官方标签大全
2014/06/20 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
JS实现小米轮播图
2020/09/21 Javascript
Python类属性的延迟计算
2016/10/22 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
python-opencv颜色提取分割方法
2018/12/08 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
使用python实现滑动验证码功能
2019/08/05 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
美的官方商城:Midea
2016/09/14 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
党员承诺书内容
2014/03/26 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
人民调解协议书范本
2014/10/11 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
展览会邀请函
2015/02/02 职场文书
2016年大学生寒假社会实践心得体会
2015/10/09 职场文书