Tensorflow知识整理(二)——数据持久化
数据读取的三种方法
(1)供给数据(feeding)(2)从文件中读取数据(3)多管线输入
数据预处理
TensorFlow支持以TFRecord格式存储数据。
TFRecord格式介绍
TFRecord文件中的数据是通过tf.train.Example Protocol Buffer格式存储的。
【写数据】以tf.train.Example Protocol Buffer格式写入数据
(1)构造写入文件类型的属性
(2)创建一个writer来写TFRecord文件
(3)将TFTFRecord转换成一个example
(4)将一个个example写入TFRecord文件
# 生成整数型的属性
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文件地址
filename = ""
# 创建一个writer来写TFRecord文件
writer = tf.python_io.TFRecordWriter(filename)
for i in range(train_size):
# TFRecord文件中的数据在此存储
example = tf.train.Example(
features = tf.train.Features(
feature = {
"key1":_bytes_feature(value1),
"key2":_int64_feature(value2)
}
)
)
# 将一个example写入TFRecord文件
writer.write(record = example.SerializeToString())
writer.close()
【读数据】
(1)创建一个reader来读取TFRecord文件中的example
(2)解析读入的一个example
(3)转换需要的数据类型
# 创建一个reader来读取TFRecord文件中的样例
reader = tf.TFRecordReader()
filename = ""
filename_queue = tf.train.string_input_producer([filename])
_, serialized_example = reader.read(filename_queue)
# 解析读入的一个样例
# 多个样例使用tf.parse_example
features = tf.parse_single_example(serialized_example,
features = {
# 解析结果为一个tensor
# 解析数据的格式要跟写入数据的格式一致
"key1":tf.FixedLenFeature([], tf.string),
"key2":tf.FixedLenFeature([], tf.int64)
})
# 转换数据类型
# 字符串解析成图像对应的像素数组
images = tf.decode_raw(features['key1'], tf.uint8)
# tf.int64 -> tf.int32
label = tf.ca