<强> 1。创建tfrecord 强>
tfrecord支持写入三种格式的数据:字符串,int64, float32,以列表的形式分别通过tf.train.BytesList, tf.train.Int64List, tf.train.FloatList写入tf.train.Feature,如下所示:
tf.train.Feature (bytes_list=tf.train.BytesList (value=https://www.yisu.com/zixun/[feature.tostring()))) #特性一般是多维数组,要先转为列表 tf.train.Feature (int64_list=tf.train.Int64List(值=列表(feature.shape))) # tostring函数后功能的形状信息会丢失,把形状也写入 tf.train.Feature (float_list=tf.train.FloatList(值=[标记]))
通过上述操作,以dict的形式把要写入的数据汇总,并构建tf.train.Features,然后构建tf.train.Example,如下:
def get_tfrecords_example(功能,标签): tfrecords_features={} feat_shape=feature.shape tfrecords_features[‘功能’]=tf.train.Feature (bytes_list=tf.train.BytesList (value=https://www.yisu.com/zixun/[feature.tostring ()))) tfrecords_features[“形状”]=tf.train.Feature (int64_list=tf.train.Int64List (value=https://www.yisu.com/zixun/list (feat_shape))) tfrecords_features['标签']=tf.train.Feature (float_list=tf.train.FloatList(值=https://www.yisu.com/zixun/label)) 返回tf.train.Example (=tf.train.Features特性(功能=tfrecords_features)
把创建的tf.train.Example序列化下,便可通过tf.python_io.TFRecordWriter写入tfrecord文件,如下:
tfrecord_wrt=tf.python_io.TFRecordWriter (xxx.tfrecord) #创建tfrecord的作家,文件名为xxx exmp=get_tfrecords_example(壮举[点],[点])标签#把数据写入的例子 exmp_serial=exmp.SerializeToString() #例子序列化 tfrecord_wrt.write (exmp_serial) #写入tfrecord文件 tfrecord_wrt.close() #写完后关闭tfrecord的作家
代码汇总:
进口tensorflow特遣部队 从tensorflow.contrib.learn.python.learn.datasets。mnist进口read_data_sets mnist=read_data_sets (“MNIST_data/> 数据集=tf.data.TFRecordDataset (xxx.tfrecord)
解析tfrecord文件的每条记录,即序列化后的tf.train.Example;使用tf.parse_single_example来解析:
=tf壮举。parse_single_example (serial_exmp特性=data_dict)
其中,data_dict是一个东西,包含的关键是写入tfrecord文件时用的关键,相应的价值则是特遣部队。tf.string FixedLenFeature([]),特遣部队。tf.int64 FixedLenFeature ([]), tf.FixedLenFeature ([], tf.float32),分别对应不同的数据类型,汇总即有:
def parse_exmp (serial_exmp): #标签中[10]是因为一个标签是一个有10个元素的列表,形状中的[x]为形状的长度=tf壮举。parse_single_example (serial_exmp特性={“功能”:tf。FixedLenFeature ([], tf.string) \ “标签”:tf.FixedLenFeature ([10], tf.float32),“形状”:tf。FixedLenFeature ([x]、tf.int64)}) 形象=tf.decode_raw(壮举“特性”,tf.float32) 标签=壮举(“标签”) 形状=特遣部队。铸造(壮举“形状”,tf.int32) 返回图片,标签,形状
解析tfrecord文件中的所有记录,使地图数据集用的方法,如下:
数据集=dataset.map (parse_exmp)
地图方法可以接受任意函数以中对数据集的数据进行处理,另外,可使用重复,洗牌,批处理方法对数据进行重复,混洗,分批;用重复复制数据集以进行多个时代;如下:
数据集=dataset.repeat(时代).shuffle (buffer_size) .batch (batch_size)
解析完数据后,便可以取出数据进行使用,通过创建迭代器来进行,如下:
迭代器=dataset.make_one_shot_iterator () batch_image、batch_label batch_shape=iterator.get_next ()
要把不同的数据集的数据喂进行模型,则需要先创建迭代器处理,即迭代器占位符,如下:
处理=tf.placeholder (tf。字符串,形状=[]) 迭代器=tf.data.Iterator.from_string_handle(处理\ dataset_train。output_type dataset_train.output_shapes) 图片,标签,形状=iterator.get_next ()
然后为各个数据集创建处理,以feed_dict传入占位符,如下:
与tf.Session税(): handle_train、handle_val handle_test=sess.run (\ [x.string_handle () x [iter_train, iter_val, iter_test]]) sess.run([损失,train_op], feed_dict={处理:handle_train}tensorflow入门:tfrecord和tf.data.TFRecordDataset的使用