tensorflow入门:tfrecord和tf.data.TFRecordDataset的使用

  

<强> 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的使用