在 tensorflow 中重新初始化迭代器后改组数据集
Shuffling the dataset after re-initializing the iterator in tensorflow
我正在使用 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
中使用种子只是为了使结果在不同的代码运行之间可重现。
种子影响整个默认图表。通过设置种子,您可以使洗牌具有确定性,这意味着它将在每次重新洗牌时保持相同的顺序。所以是的,您将在第二个时期获得相同的订单。您还可以为种子设置占位符并在每个时期更改它,更多信息在这里
https://github.com/tensorflow/tensorflow/issues/13446
没有种子改组变成伪随机
我正在使用 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
中使用种子只是为了使结果在不同的代码运行之间可重现。
种子影响整个默认图表。通过设置种子,您可以使洗牌具有确定性,这意味着它将在每次重新洗牌时保持相同的顺序。所以是的,您将在第二个时期获得相同的订单。您还可以为种子设置占位符并在每个时期更改它,更多信息在这里 https://github.com/tensorflow/tensorflow/issues/13446 没有种子改组变成伪随机