参考:https://blog.csdn.net/u012222949/article/details/72875281
参考:https://blog.csdn.net/chengshuhao1991/article/details/78656724
参考:https://zhuanlan.zhihu.com/p/27238630
tfrecords文件的存储:
将其他数据存储为tfrecord文件的时候,需要进行两个步骤:
建立tfrecord存储器
构造每个样本的Example模块
1、构建tfrecord存储器
实现建立存储器的函数为:
tf.python_io.TFRecordWriter(path)#写入tfrecord文件#path为tfrecord的存储路径
2、构造每个样本的example模块
Example协议块的规则如下:
message Example {
Features features= 1;
};
message Features {
map feature = 1;
};
message Feature {
oneof kind {
BytesList bytes_list= 1;
FloatList float_list= 2;
Int64List int64_list= 3;
}
};
其中实现的几个函数如下所示:
def_int64_feature(value):return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
tf.train.Example(features=tf.train.Features(feature={'i':_int64_feature(1),'j':_int64_feature(2)}))
#或者直接写成
tf.train.Example(features=tf.train.Features(feature={'i':tf.train.Feature(int64_list=tf.train.Int64List(value=[1])),'j':tf.train.Feature(int64_list=tf.train.Int64List(value=[2]))}))#返回结果如下
features {
feature {
key:"i"value {
int64_list {
value:1}
}
}
feature {
key:"j"value {
int64_list {
value:2}
}
}
}
tf.train.Example(features =None)#用于写入tfrecords文件#features : tf.train.Features类型的特征实例#返回example协议格式块
tf.train.Features(feature =None)#用于构造每个样本的信息键值对#feature : 字典数据,key为要保存的名字,value为tf.train.Feature实例#返回Features类型
tf.train.Feature(**options)#options可选的三种数据格式:
bytes_list = tf.train.BytesList(value =[Bytes])
int64_list= tf.train.Int64List(value =[Value])
float_list= tf.trian.FloatList(value = [Value])
writer=tf.python_io.TFRecordWriter(filename)
example=tf.train.Example(features=tf.train.Features(feature={'i':_int64_feature(i),'j':_int64_feature(j)}))
writer.write(example.SerializeToString()) #序列转换成字符串
#如上读文件与如下写文件对应
filename_queue=tf.train.string_input_producer(files,shuffle=False) #传入文件名list,系统将其转化为文件名queue
reader=tf.TFRecordReader()
_,serialized=reader.read(filename_queue)
features=tf.parse_single_example(serialized,features={'i':tf.FixedLenFeature([],tf.int64),'j':tf.FixedLenFeature([],tf.int64)}) #tf.TFRecordReader()的parse_single_example()解析器,用于将Example协议内存块解析为