在 TensorFlow 文档中 GitHub ,有以下代码:
# Reshape non-sparse elements just once:
for k in self._keys_to_features:
v = self._keys_to_features[k]
if isinstance(v, parsing_ops.FixedLenFeature):
example[k] = array_ops.reshape(example[k], v.shape)
我想知道为什么在从 TFRecord 文件解析 FixedLenFeature 张量后需要 reshape 它。
事实上,FixedLenFeature 和 VarLenFeature 之间有什么区别,它们与 Tensor 有什么关系?在这种情况下我正在加载图像,那么为什么它们都被归类为 FixedLenFeature? VarLenFeature 的示例是什么?
请您参考如下方法:
张量存储在没有形状信息的磁盘上 Example protocol buffer format (TFRecord 文件是示例的集合)。 .proto 文件中的文档描述得相当好,但基本要点是张量条目以行优先顺序存储,没有形状信息,因此在读取张量时必须提供形状信息。请注意,将 Tensor 存储在内存中的情况类似:形状信息是分开保存的,仅 reshape Tensor 只会更改元数据(另一方面,转置之类的东西可能很昂贵)。
VarLenFeatures 是诸如句子之类的序列,它们很难像常规 Tensors 一样批处理在一起,因为生成的形状会参差不齐。 parse_example documentation有一些很好的例子。图片的长度是固定的,如果您加载一批图片,它们将具有相同的形状(例如,它们都是 32x32 像素,因此一批 10 个可以具有 10x32x32 的形状)。
