在tensorflow中重新初始化迭代器后改组数据集

时间:2019-02-21 22:49:56

标签: python tensorflow shuffle tensorflow-datasets

我正在使用tensorflow数据集api将数据输入模型。据我所知,我应该对数据集进行改组以从模型中获得最佳性能。但是,由于我正在训练一个纪元,然后测试一个纪元,依此类推……我不确定我是否会以不同的方式执行改组。为了更好地说明,下面是我的代码:

train_dataset = tf.data.TFRecordDataset(filename_train).map(_parse_function).filter(filter_examples)\
            .shuffle(60000, seed=mseed, reshuffle_each_iteration=False) \
            .batch(train_batch_size)
train_iterator = train_dataset.make_initializable_iterator(shared_name="Training_iterator")

因此,每当我使用整个数据集时,我都将迭代器重新初始化为:

sess.run(train_iterator.initializer)

那安全吗?我问,因为在训练时我的损失函数具有以下形状

enter image description here

因此,不同时期之间的改组是确定性的吗?

请注意,我在shuffle中使用了种子,目的是使结果在不同的代码运行之间可重复。

1 个答案:

答案 0 :(得分:1)

种子会影响整个默认图形。通过设置种子,可以确定混洗的确定性,这意味着它将在每次重排时保持相同的顺序。所以是的,您将在第二个时代获得相同的订单。您还可以设置种子的占位符,并在每个纪元进行更改,有关更多信息,请点击此处 https://github.com/tensorflow/tensorflow/issues/13446 没有种子改组就变成伪随机