tensorflow TFRecords无法解析序列化的示例

时间:2019-09-19 02:46:02

标签: python tensorflow tfrecord

尝试解码TFRecord示例时出现以下错误:

  

InvalidArgumentError:名称:,功能:相关性(数据类型:   浮动)为必填项,但找不到。 [Op:ParseExample]

要对示例进行解码,请按以下方式使用tf.io.parse_example

example_features = tf.compat.v1.io.parse_example(
     tf.reshape(serialized_list, [-1]), peritem_feature_spec)

其中serialized_list看起来像

[ <example_object>, ...
b'\n\xcc\x01\n\x15\n\trelevance\x12\x08\x12\x06\n\x04\x9a\xe9`D\n\xb2
\x01\n\x13encoded_clust_index\x12\x9a\00\ <more...>]

peritem_feature_spec看起来

peritem_feature_spec = {
    'relevance':tf.FixedLenFeature([], tf.float32),
    'encoded_clust_index':tf.VarLenFeature(tf.float32)
    }

我很困惑为什么找不到功能“相关性”。我想我正确地编码和创建了TFRecord对象。我是否错误地创建了feature_spec?我的想法是tf.VarLenFeature是使用不正确的功能类型,但是我无法弄清楚什么是正确的。

使用tensorflow_ranking.python.data.parse_from_example_in_example可以正确地将TFRecord解码为其功能,但我不知道为什么tf.io.parse_example失败

2 个答案:

答案 0 :(得分:0)

您可以代替VarLenFeature试试tf.FixedLenSequenceFeature([], tf.float32, allow_missing = True ,default_value=0)解释的here,看看是否可行?

答案 1 :(得分:0)

编辑:我的旧答案在该答案下方

正确的答案是为功能规格提供await page.evaluate(`(async() => { echarts.getDataURL(); })()`);

default_value

我的(有效,但不正确)答案如下

因此问题归结于如何在tensorflow_ranking库中填充我的功能。它填充了一个列表功能,例如:

peritem_feature_spec = {
    'relevance':tf.FixedLenFeature([], tf.float32, default_value=0.0),
    'encoded_clust_index':tf.VarLenFeature(tf.float32, default_value=0.0)
    }

此方法将空字节附加到张量的末尾。解析器在空张量中寻找def pad_fn(): return tf.pad( tensor=serialized_list, paddings=[[0, 0], [0, list_size -cur_list_size]], constant_values="") ,并响应找不到它。我的解决方法是附加序列化的TFRecord示例原型,而不是一个空字节字符串。我是这样实现的:

feature_name