【问题标题】:TensorFlow: convert tf.Dataset to tf.TensorTensorFlow:将 tf.Dataset 转换为 tf.Tensor
【发布时间】:2021-02-06 09:34:51
【问题描述】:

我要生成范围为10的窗口:

import tensorflow as tf

dataset = tf.data.Dataset.from_tensor_slices(tf.range(10))
dataset = dataset.window(5, shift=1, drop_remainder=True)

并且想在这个数据集上训练我的模型。

为此,必须将这些窗口转换为张量。但是这些窗口的数据类型不能通过tf.convert_to_tensor 转换为张量。 tf.convert_to_tensor(list(window)) 是可以的,但是效率很低。

有谁知道如何有效地将tf.VariantDataset 转换为tf.Tensor

感谢您的帮助!

【问题讨论】:

  • 我不确定我是否理解。您通常不会将数据集转换为张量,而是迭代数据集,它们会在这些迭代中为您提供张量。你想要其中一扇窗户吗?或者你想得到一个包含所有窗口的张量?
  • @jdehesa 后者:)

标签: python tensorflow dataset tensorflow2.0 tensorflow-datasets


【解决方案1】:

如果你想创建一个滑动窗口的张量,通过数据集来实现并不是最好的方法,效率和灵活性都要低得多。我认为没有合适的操作,但是对于 2D 和 3D 数组有两个类似的操作,tf.image.extract_patchestf.extract_volume_patches。您可以重塑您的一维数据以使用它们:

import tensorflow as tf

a = tf.range(10)
win_size = 5
stride = 1
# Option 1
a_win = tf.image.extract_patches(tf.reshape(a, [1, -1, 1, 1]),
                                 sizes=[1, win_size, 1, 1],
                                 strides=[1, stride, 1, 1],
                                 rates=[1, 1, 1, 1],
                                 padding='VALID')[0, :, 0]
# Option 2
a_win = tf.extract_volume_patches(tf.reshape(a, [1, -1, 1, 1, 1]),
                                  ksizes=[1, win_size, 1, 1, 1],
                                  strides=[1, stride, 1, 1, 1],
                                  padding='VALID')[0, :, 0, 0]
# Print result
print(a_win.numpy())
# [[0 1 2 3 4]
#  [1 2 3 4 5]
#  [2 3 4 5 6]
#  [3 4 5 6 7]
#  [4 5 6 7 8]
#  [5 6 7 8 9]]

【讨论】:

  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 2019-11-28
  • 2022-07-19
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多