陈伟@航天科技智慧城市研究院 [email protected]
tfrecord格式说明
正常情况下我们训练文件夹经常会生成 train, test 或者val文件夹,这些文件夹内部往往会存着成千上万的图片或文本等文件,这些文件被散列存着,这样不仅占用磁盘空间,并且再被一个个读取的时候会非常慢,繁琐。占用大量内存空间(有的大型数据不足以一次性加载)。此时我们TFRecord格式的文件存储形式会很合理的帮我们存储数据。TFRecord内部使用了“Protocol Buffer”二进制数据编码方案,它只占用一个内存块,只需要一次性加载一个二进制文件的方式即可,简单,快速,尤其对大型训练数据很友好。而且当我们的训练数据量比较大的时候,可以将数据分成多个TFRecord文件,来提高处理效率。
前置工作
我们在《cifar10数据通过tensorflow转换成图像》将cifar10数据转换成了图像数据。本文将演示将这些图片序列化成tfrecord数据,以便后续的训练。
写tfrecord数据writer_cifar10.py
import tensorflow as tf
import cv2
import numpy as np
import glob
classification = ['airplane',
'automobile',
'bird',
'cat',
'deer',
'dog',
'frog',
'horse',
'ship',
'truck']
idx = 0
im_data = [] # 所有类别的图片文件
im_labels = [] # 所有文件的标签
for path in classification: # 对于每个类别
path = "data/image/train/" + path # 形如:data/image/train/bird
im_list = glob.glob(path + "/*") # 获取这个类别下所有文件
# Python在方括号中使用for循环,类似[0 for i in range(10)],叫 列表解析List Comprehensions
# 根据已有列表,高效创建新列表的方式。
# 列表解析是Python迭代机制的一种应用