我正在使用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)
那安全吗?我问,因为在训练时我的损失函数具有以下形状
因此,不同时期之间的改组是确定性的吗?
请注意,我在shuffle
中使用了种子,目的是使结果在不同的代码运行之间可重复。
答案 0 :(得分:1)
种子会影响整个默认图形。通过设置种子,可以确定混洗的确定性,这意味着它将在每次重排时保持相同的顺序。所以是的,您将在第二个时代获得相同的订单。您还可以设置种子的占位符,并在每个纪元进行更改,有关更多信息,请点击此处 https://github.com/tensorflow/tensorflow/issues/13446 没有种子改组就变成伪随机