尝试解码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
失败
答案 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