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

时间:2018-09-11 07:34:00

标签: 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)

其中 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

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

更具体地说,

比方说,我有20000张图像,批处理大小= 100,混洗缓冲区大小= 1000,我训练了5000个步骤。

1。每隔1000个步骤,我是否使用10个批次(大小为100),每个批次都从随机缓冲区中的相同1000张图像中独立获取?

2.1随机播放缓冲区是否像移动的窗口一样工作?

2.2或者,它是从5000张图像中随机抽取1000张(替换或不替换)?

3。在整个5000个步骤中,混洗缓冲区处于多少个不同状态?

1 个答案:

答案 0 :(得分:0)

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

以点的形式回答您:

  

对于每1000个步骤,我是否使用10个批次(大小为100),每个批次都分别从随机缓冲区中的相同1000张图像中获取?

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

  

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

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

  

在整个5000个步骤中,混洗缓冲区处于多少不同状态?

靠近n_images * n_steps。因此,在这种情况下为25,000,000。可能偶然有一些州出现过,但可能性很小。

您可能还会发现this question有用。