0

tf.keras.Model.fit在阅读了有关and的文档后,我仍然不知道tf.data.Dataset,当传递tf.data.Dataset给 fit 函数时,我应该在数据集对象上调用repeatand还是应该提供and参数来适应?或两者?我应该对验证集应用相同的处理吗?batchbatch_sizeepochs

当我在这里时,我可以shuffle在之前的数据集fit吗?(似乎很明显是的)如果是这样,在打电话之前,之后Dataset.batchDataset.repeat(如果打电话给他们)?

编辑:使用batch_size参数时,并且之前没有调用Dataset.batch(batch_size),我收到以下错误:

ValueError: The `batch_size` argument must not be specified for the given input type.
Received input: <MapDataset shapes: ((<unknown>, <unknown>, <unknown>, <unknown>), (<unknown>, <unknown>, <unknown>)), 
types: ((tf.float32, tf.float32, tf.float32, tf.float32), (tf.float32, tf.float32, tf.float32))>, 
batch_size: 1

谢谢

4

1 回答 1

2

有不同的方法可以在这里做你想做的事,但我经常使用的一种是:

batch_size = 32
ds = tf.Dataset()
ds = ds.shuffle(len_ds)
train_ds = ds.take(0.8*len_ds)
train_ds = train_ds.repeat().batch(batch_size)
validation_ds = ds.skip(0.8*len_ds)
validation_ds = train_ds.repeat().batch(batch_size)
model.fit(train_ds,
          steps_per_epoch = len_train_ds // batch_size,
          validation_data = validation_ds,
          validation_steps = len_validation_ds // batch_size,
          epochs = 5)

这样,您也可以在模型拟合后访问所有变量,例如,如果您想可视化验证集,您可以。这对于validation_split. 如果你删除.batch(batch_size),你应该删除// batch_sizes,但我会留下它们,因为它更清楚现在发生了什么。

你总是必须提供时代。

计算你的训练/验证集的长度需要你遍历它们:

len_train_ds = 0
for i in train_ds:
  len_train_ds += 1

如果在tf.Dataset形式。

于 2020-02-26T10:19:48.333 回答