代码之家  ›  专栏  ›  技术社区  ›  Stewart_R

TensorFlow TFRecord:无法分析序列化示例

  •  1
  • Stewart_R  · 技术社区  · 5 年前

    我正努力跟随 this guide 为了将输入数据序列化为tfrecord格式,但在尝试读取数据时,我一直遇到此错误:

    InvalidArgumentError:键:我的\键。无法分析序列化示例。

    我不知道我哪里出错了。这是一个我无法克服的问题的最低限度的复制品。

    序列化一些示例数据:

    with tf.python_io.TFRecordWriter('train.tfrecords') as writer:
      for idx in range(10):
            example = tf.train.Example(
                features=tf.train.Features(
                    feature={
                        'label': tf.train.Feature(int64_list=tf.train.Int64List(value=[1,2,3])),
                        'test': tf.train.Feature(float_list=tf.train.FloatList(value=[0.1,0.2,0.3])) 
                    }
                )
            )
    
            writer.write(example.SerializeToString())
      writer.close()
    

    分析函数并反序列化:

    def parse(tfrecord):
      features = {
          'label': tf.FixedLenFeature([], tf.int64, default_value=0),
          'test': tf.FixedLenFeature([], tf.float32, default_value=0.0),
      }
      return tf.parse_single_example(tfrecord, features)
    
    dataset = tf.data.TFRecordDataset('train.tfrecords').map(parse)
    getnext = dataset.make_one_shot_iterator().get_next()
    

    尝试运行此时:

    with tf.Session() as sess:
      v = sess.run(getnext)
      print (v)
    

    我触发上述错误消息。

    是否可以克服此错误并反序列化我的数据?

    1 回复  |  直到 5 年前
        1
  •  3
  •   Vlad-HC    5 年前

    tf.FixedLenFeature() 用于读取固定大小的数据数组。数据的形状应该事先定义好。将parse函数更新为

    def parse(tfrecord):
       return tf.parse_single_example(tfrecord, features={
           'label': tf.FixedLenFeature([3], tf.int64, default_value=[0,0,0]),
           'test': tf.FixedLenFeature([3], tf.float32, default_value=[0.0, 0.0, 0.0]),
       })
    

    应该做这个工作。