使用以下代码训练我的网络时:
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个步骤中,混洗缓冲区处于多少个不同状态?
答案 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有用。