【问题标题】:How do I bundle two tensors together in Tensorflow Batches?如何在 Tensorflow Batches 中将两个张量捆绑在一起?
【发布时间】:2020-11-06 23:48:37
【问题描述】:

我想创建一个损失,它同时重建 X 和张量流中标签 y 的函数。两者需要匹配,我使用的是tf.data.Dataset.batch() 和渐变胶带,而不是像您通常使用的那样直接调用.fit(, batch = number)。为了解决这个问题,我想到了几种方法:

  1. 将 X 和 Y 捆绑在一起作为一个元组,并将该元组转换为 tensorflow 数据集,并在使用 .batch() 后尝试解包
  2. 只需将 y 附加到 X 张量的末尾,然后在使用 .batch() 后将两者分开

有没有标准的方法来实现这种事情?我不确定上述两种方法是否很老套,但似乎第 2 种方法至少可以工作,但我也想知道我是否让这个过程过于复杂。我目前仅针对 x 的数据加载设置如下所示:

train_dataset = (tf.data.Dataset.from_tensor_slices(train_dataset)
                 .shuffle(len(training_ind))
                 .batch(bsize))

我的设想是这样的:

train_x_dataset = tf.data.Dataset.from_tensor_slices(train_x)
train_y_dataset = tf.data.Dataset.from_tensor_slices(train_y)

train_datset = (tf.data.Dataset((train_x_dataset,train_y_dataset))
                     .shuffle(len(training_ind))
                     .batch(bsize))

for train_x, train_y in train_dataset:
  loss(train_step(model, train_x, train_y, optimizer))

【问题讨论】:

  • 您可以使用tf.data.Dataset.zip 同时遍历两个数据集。这是你需要的吗?
  • @jakub 这看起来或多或少像我正在尝试做的事情(手指交叉它与批处理兼容)。我会玩一下,看看它是否有效,谢谢!

标签: python tensorflow tensorflow-datasets


【解决方案1】:

这比我预期的要容易得多。本质上我已经有了将两个数据集作为元组传递的基本想法,唯一的区别是你必须在调用.from_tensor_slices 时传递两者,而不是之后。然后访问元素几乎与预期一样。

train_dataset = tf.data.Dataset.from_tensor_slices((train_x,train_y))

train_dataset = (train_dataset
                     .shuffle(n_obs)
                     .batch(bsize))

for train_x, train_y in train_dataset:
  loss(train_step(model, train_x, train_y, optimizer))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 2019-03-18
    • 2021-07-04
    • 2011-10-27
    • 2018-05-16
    相关资源
    最近更新 更多