tfrecord 格式理解

tfrecord 格式理解首先是大的概念:《tensorflow》那本书以上来就是这个,刚看的时候一下子还没理解它:messageExample{Featuresfeatures=1;#Features是一个字典,key是string类型的,value是Feature。Feature的取值有好几种,下面列出来了。};messageFeatures{mapfea

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

message Example{
      Features features = 1;    #Features是一个字典,key是string类型的,value是Feature。Feature的取值有好几种,下面列出来了。
};
message Features{
    map<string,Feature> feature = 1;   #看,map:<string,Feature>。 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,以上,有了新的理解会再来补充,欢迎大家指正。。。

今天的文章tfrecord 格式理解分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/5803.html

(0)
编程小号编程小号

相关推荐

发表回复

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