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



在GitHub的TensorFlow文档中,有以下代码:

# 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 张量后需要重塑它。

事实上,FixedLenFeature和VarLenFeature之间有什么区别,它们与张量有什么关系?在这种情况下,我正在加载图像,那么为什么它们都被归类为固定镜头功能?什么是VarLenFeature的例子?

量以示例协议缓冲区格式存储在磁盘上,没有形状信息(TFRecord 文件是示例的集合(。.proto文件中的文档描述得相当好,但基本点是张量条目以行为主的顺序存储,没有形状信息,因此在读取张量时必须提供。请注意,将张量存储在内存中的情况类似:形状信息是单独保存的,仅重塑张量只会更改元数据(另一方面,诸如转置之类的事情可能很昂贵(。

VarLenFeatures是诸如句子之类的序列,这些序列很难作为常规张量批处理在一起,因为生成的形状会参差不齐。parse_example文档有一些很好的例子。图像是固定长度的,因为如果您加载一批图像,它们都将具有相同的形状(例如,它们都是 32x32 像素,因此一批 10 个图像的形状可以是 10x32x32(。