Skip to main content
 首页 » 编程设计

python之TensorFlow:为什么在从 TFRecord 文件解析 TF 示例时需要 reshape 非稀疏元素一次

2025年02月15日26mayingbao

在 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 的形状)。