小编gui*_*kln的帖子

如何在tf.estimator的input_fn中使用tf.data的可初始化迭代器?

我想管理我的培训tf.estimator.Estimator但是在tf.dataAPI 旁边使用它有些麻烦.

我有这样的事情:

def model_fn(features, labels, params, mode):
  # Defines model's ops.
  # Initializes with tf.train.Scaffold.
  # Returns an tf.estimator.EstimatorSpec.

def input_fn():
  dataset = tf.data.TextLineDataset("test.txt")
  # map, shuffle, padded_batch, etc.

  iterator = dataset.make_initializable_iterator()

  return iterator.get_next()

estimator = tf.estimator.Estimator(model_fn)
estimator.train(input_fn)
Run Code Online (Sandbox Code Playgroud)

因为我不能使用一个make_one_shot_iterator用于我的用例,我的问题是input_fn包含一个应该在其中初始化的迭代器model_fn(这里,我tf.train.Scaffold用来初始化本地操作).

此外,我明白我们不能只使用input_fn = iterator.get_next其他ops将不会添加到同一图表.

初始化迭代器的推荐方法是什么?

python tensorflow tensorflow-datasets tensorflow-estimator

10
推荐指数
1
解决办法
4136
查看次数

使用 tf.estimator.train_and_evaluate 时如何有效地洗牌大型 tf.data.Dataset?

tf.estimator.train_and_evaluate文件明确指出,输入数据集必须正确洗牌的训练,看看所有的例子:

过拟合:为了避免过拟合,建议设置训练 input_fn 对训练数据进行适当的 shuffle。还建议在执行评估之前对模型进行更长时间的训练,比如多个时期,因为每次训练的输入管道都从头开始。这对于本地培训和评估尤为重要。

在我的应用程序中,我想从tf.data.Dataset具有任意评估频率和shuffle()缓冲区大小的完整样本中统一采样示例。否则,训练最多只能看到第一个:

(steps_per_second * eval_delay * batch_size) + buffer_size
Run Code Online (Sandbox Code Playgroud)

元素,有效地丢弃其余元素。有没有一种有效的方法来解决这个问题,而无需在系统内存中加载完整的数据集?

我考虑过根据缓冲区大小对数据集进行分片,但如果评估不经常发生,它将在同一个分片上迭代多次(一个repeat()关闭管道)。理想情况下,我想在对数据集进行完整迭代后移动到另一个分片,这可能吗?

感谢您的任何指点!

tensorflow tensorflow-datasets tensorflow-estimator

5
推荐指数
1
解决办法
2256
查看次数