tfrecord 格式理解

tfrecord 格式理解首先是大的概念 tensorflow 那本书以上来就是这个 刚看的时候一下子还没理解它 messageExamp Featuresfeat 1 Features 是一个字典 key 是 string 类型的 value 是 Feature Feature 的取值有好几种 下面列出来了 messageFeatu mapfea

《tensorflow》那本书以上来就是这个,刚看的时候一下子还没理解它:

message Example{ Features features = 1; #Features是一个字典,key是string类型的,value是Feature。Feature的取值有好几种,下面列出来了。 }; message Features{ map 
  
    feature = 1; #看,map: 
   
     。 feature这里取了值1. }; #这个就是feature的可能取值了。 message Feature{ oneof kind{ BytesList bytes_list = 1; #上面的 feature = 1,也就是把数据存为bytes类型了。。。这个后面会细讲,别急。 FloatList float_list = 2; Int64List int64_list = 3; } }; 
    
  

这样理解吧:这个Example里弄个字典,key是你所存数据的名字,比如:image、label啊之类的,名字是string类型的,这很好理解啊,看像这样:‘image’ ‘label’ 这可不是string嘛。。。然后value给的是存进数据来,被转化为的格式的情况:1代表 BytesList、2代表 FloatList 。。。就是这样了。

实际的存储栗子:

#生成整数型的属性(feature) def _int64_feature(value): #(注意这个函数,下面有用到的。。。) return tf.train.Feature(int64_list=tf.train.Int64List(value=[value])) #生成字符串型的属性(feature) def _bytes_feature(value): #(注意这个函数,下面有用到的。。。) return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value])) def convert(images,labels,name): #获取要转换为TFRecord文件的图片数目 num = images.shape[0] #输出TFRecord文件的文件名 filename = name+'.tfrecords' print('Writting',filename) writer = tf.python_io.TFRecordWriter(filename) #创建一个writer来写TFRecord文件 for i in range(num): #将图像矩阵转化为一个字符串 tostring()函数。 img_raw = images[i].tostring() #img_raw是转成string的编码后的图像。 #将一个样例转化为Example Protocol Buffer,并将所有需要的信息写入数据结构 example = tf.train.Example(features=tf.train.Features(feature={ 'label': _int64_feature(int(labels[i])), #调用上面的_int64_feature()函数。 'image_raw': _bytes_feature(img_raw)})) #调用上面的_bytes_feature()函数。 #将example写入TFRecord文件 writer.write(example.SerializeToString()) writer.close() print('Writting End') 

tfrecord 格式理解

嗯,以上是存成tfrecord,然后是读取:

def read_and_decode(filename_queue): reader = tf.TFRecordReader() #创建一个reader来读取TFRecord文件中的样例 #从文件中读出一个样例 _,serialized_example = reader.read(filename_queue) #解析读入的一个样例 features = tf.parse_single_example(serialized_example,features={ 'label':tf.FixedLenFeature([],tf.int64), 'image_raw':tf.FixedLenFeature([],tf.string) }) #将字符串解析成图像对应的像素数组 image = tf.decode_raw(features['image_raw'],tf.uint8) #tf.decode_raw()函数,解码图像,转为数组形式。 label = tf.cast(features['label'],tf.int32) #tf.cast()函数,类型转换,转换成tf.int32. image.set_shape([IMG_PIXELS]) image = tf.reshape(image,[IMG_HEIGHT,IMG_WIDTH,IMG_CHANNELS]) image = tf.cast(image, tf.float32) * (1. / 255) - 0.5 return image,label

tfrecord 格式理解


ok,以上,有了新的理解会再来补充,欢迎大家指正。。。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211464.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午10:22
下一篇 2026年3月18日 下午10:22


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号