我最近将我的建模框架切换为使用自定义 Tensorflow Estimators和Datasets,并且总体上对这个工作流程非常满意。
但是,我刚刚注意到我的 dataset_input_fn 如何从 tfrecords 加载数据的问题。我的输入函数是根据 Tensorflow 文档中的示例建模的。当我的示例超出 RAM 容量时,就会出现问题。如果我有 1e6 个示例,并将我的 shuffle buffer_size 设置为 1e5,则选择一次 1e5 个示例的子集,打乱,然后迭代。这意味着我的模型只在我整个数据集的 10% 上进行了训练。我设置此行为的代码完全是从Tensorflow 文档示例代码中借用的:
dataset = dataset.map(parser)
dataset = dataset.shuffle(buffer_size=10000)
dataset = dataset.batch(32)
dataset = dataset.repeat(num_epochs)
iterator = dataset.make_one_shot_iterator()
我的问题:是否可以在我训练时用初始 1e5 之外的新示例填充 shuffle 缓冲区?one_shot_iterator 是否支持这种类型的功能?我需要使用可初始化的迭代器吗?
谢谢!