【问题标题】:Flatten a dataset in TensorFlow在 TensorFlow 中展平数据集
【发布时间】:2018-10-02 07:21:10
【问题描述】:

我正在尝试将 TensorFlow 中的数据集转换为具有多个单值张量。数据集当前如下所示:

[12 43 64 34 45 2 13 54] [34 65 34 67 87 12 23 43] [23 53 23 1 5] ...

转换后应该是这样的:

[12] [43] [64] [34] [45] [2] [13] [54] [34] [65] [34] [67] [87] [12] ...

我最初的想法是在数据集上使用flat_map,然后使用reshapeunstack 将每个张量转换为张量列表:

output_labels = self.dataset.flat_map(convert_labels)

...

def convert_labels(tensor):
    id_list = tf.unstack(tf.reshape(tensor, [-1, 1]))
    return tf.data.Dataset.from_tensors(id_list)

然而,每个张量的形状只是部分已知(即(?, 1)),这就是unstack操作失败的原因。有没有办法在不显式迭代它们的情况下仍然“连接”不同的张量?

【问题讨论】:

    标签: python tensorflow flatten tensor tensorflow-datasets


    【解决方案1】:

    您的解决方案非常接近,但 Dataset.flat_map() 采用返回 tf.data.Dataset 对象的函数,而不是张量列表。幸运的是,Dataset.from_tensor_slices() 方法完全适合您的用例,因为它可以将张量拆分为可变数量的元素:

    output_labels = self.dataset.flat_map(tf.data.Dataset.from_tensor_slices)
    

    请注意,tf.contrib.data.unbatch() 转换实现了相同的功能,并且在 TensorFlow 的当前 master 分支(将包含在 1.9 版本中)中的实现效率稍高一些:

    output_labels = self.dataset.apply(tf.contrib.data.unbatch())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-23
      • 2020-12-15
      • 2021-09-12
      • 2020-10-16
      • 2020-07-01
      • 1970-01-01
      • 2016-04-02
      • 2018-11-12
      相关资源
      最近更新 更多