在Tensorflow中,当使用dataset.shuffle(1000)时,我是否仅使用来自整个数据集的1000个数据?

use*_*771 6 python tensorflow

使用以下代码训练我的网络时:

classifier = tf.estimator.Estimator(
    model_fn=my_neural_network_model, 
    model_dir=some_path_to_save_checkpoints,
    params={
        some_parameters
    }
)
classifier.train(input_fn=data_train_estimator, steps=step_num)
Run Code Online (Sandbox Code Playgroud)

其中data_train_estimator定义为:

def data_train_estimator():
    dataset = tf.data.TextLineDataset(train_csv_file).map(_parse_csv_train)  
    dataset = dataset.batch(100)
    dataset = dataset.shuffle(1000)
    dataset = dataset.repeat()
    iterator = dataset.make_one_shot_iterator() 
    feature, label = iterator.get_next()
    return feature, label
Run Code Online (Sandbox Code Playgroud)

dataset.shuffle(1000)实际上如何工作?

进一步来说,

假设我有20000张图像,批量大小= 100,随机缓冲区大小= 1000,我训练模型5000步.

1.对于每1000个步骤,我使用10个批次(大小为100),每个批次独立地从洗牌缓冲区中的相同1000个图像中取出?

2.1 shuffle缓冲区是否像移动窗口一样工作?

2.2或者,它是否从5000张图片中随机挑选1000张(有或没有替换)?

3.在整个5000步中,有多少个不同的状态都有shuffle缓冲区?

use*_*663 1

您将在内存中shuffle_buffer=1000保留 1000 个点的缓冲区。当你在训练时需要一个数据点时,你会从点1-1000中随机抽取该点。之后缓冲区中只剩下 999 个点,并添加了 1001 个点。然后可以从缓冲区中绘制下一个点。

以点的形式回答你:

对于每 1000 个步骤,我是否使用 10 个批次(大小为 100),每个批次独立地取自随机缓冲区中的相同 1000 个图像?

不会,图像缓冲区将保持不变,但绘制的图像将被该时期以前未使用过的图像替换。

随机播放缓冲区是否像移动窗口一样工作?或者,它是否从 5000 张图像中随机挑选 1000 张(有或没有替换)?

它无需替换即可绘制,并且实际上不像移动窗口那样工作,因为绘制的图像是动态替换的。

在整个 5000 步中,shuffle buffer 经历了多少种不同的状态?

接近 n_images * n_steps。在这种情况下是 25,000,000。可能有一些状态以前曾偶然出现过,但可能性不大。

您可能还会发现这个问题很有用。