使用以下代码训练我的网络时:
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缓冲区?
您将在内存中shuffle_buffer=1000
保留 1000 个点的缓冲区。当你在训练时需要一个数据点时,你会从点1-1000中随机抽取该点。之后缓冲区中只剩下 999 个点,并添加了 1001 个点。然后可以从缓冲区中绘制下一个点。
以点的形式回答你:
对于每 1000 个步骤,我是否使用 10 个批次(大小为 100),每个批次独立地取自随机缓冲区中的相同 1000 个图像?
不会,图像缓冲区将保持不变,但绘制的图像将被该时期以前未使用过的图像替换。
随机播放缓冲区是否像移动窗口一样工作?或者,它是否从 5000 张图像中随机挑选 1000 张(有或没有替换)?
它无需替换即可绘制,并且实际上不像移动窗口那样工作,因为绘制的图像是动态替换的。
在整个 5000 步中,shuffle buffer 经历了多少种不同的状态?
接近 n_images * n_steps。在这种情况下是 25,000,000。可能有一些状态以前曾偶然出现过,但可能性不大。
您可能还会发现这个问题很有用。
归档时间: |
|
查看次数: |
369 次 |
最近记录: |