【发布时间】:2018-01-31 18:28:31
【问题描述】:
我最近将我的建模框架切换为使用自定义 Tensorflow Estimators 和 Datasets,总体上对这个工作流程非常满意。
但是,我刚刚注意到我的 dataset_input_fn 如何从 tfrecords 加载数据的问题。我的输入函数是根据 Tensorflow 文档中的 example 建模的。当我的示例超出 RAM 容量时,就会出现问题。如果我有 1e6 个示例,并将我的 shuffle buffer_size 设置为 1e5,则选择一次 1e5 示例的子集,打乱,然后迭代。这意味着我的模型只在我整个数据集的 10% 上进行了训练。我设置此行为的代码完全是从Tensorflow documentation example code 借来的:
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 之外的新示例填充随机播放缓冲区? one_shot_iterator 是否支持这种类型的功能?我需要使用可初始化的迭代器吗?
谢谢!
【问题讨论】:
-
是的,我会改用
iterator = dataset.make_initializable_iterator()和dataset = dataset.repeat(None)(让它无限重复)。 -
感谢您的快速响应 - 不幸的是,使用带有估计器的可初始化迭代器并不是那么简单。我发现这个有点相关的帖子:stackoverflow.com/questions/45011724/…
-
这篇文章可能会有所帮助:stackoverflow.com/questions/44132579/…
-
You do not need to mark questions as "SOLVED" via editing the title,或posting updates/thanks in posts。只需添加您自己的答案,并标记为已接受。任何额外的东西都可能被视为未来访客的噪音。请参阅:Can I answer my own question?。
标签: tensorflow tensorflow-datasets tensorflow-estimator