【发布时间】:2020-11-06 23:48:37
【问题描述】:
我想创建一个损失,它同时重建 X 和张量流中标签 y 的函数。两者需要匹配,我使用的是tf.data.Dataset.batch() 和渐变胶带,而不是像您通常使用的那样直接调用.fit(, batch = number)。为了解决这个问题,我想到了几种方法:
- 将 X 和 Y 捆绑在一起作为一个元组,并将该元组转换为 tensorflow 数据集,并在使用
.batch()后尝试解包 - 只需将 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