使用自定义估算器控制时代

时间:2019-06-07 08:04:43

标签: python tensorflow tensorflow-datasets tensorflow-estimator

我的输入函数如下:

binarySearch([2, 6, 9, 14, 21],  0) // => -1
binarySearch([2, 6, 9, 14, 21], -4) // => -1
binarySearch([2, 6, 9, 14, 21], 40) // => -1

如何通知我的模型这是数据集中的第n次重复(历元)?我想实现诸如降低学习率,在最初n个时期内没有对抗损失的训练模型之类的功能。我正在使用tf.data.Dataset和tf.estimator.Estimator。 如果我多次调用火车方法:

    def input_fn():
        dataset.repeat(epochs).batch(16)
    estimator_model.train(input_fn, steps)

它将重建模型(不同的权重,不同的检查点目录,不同的tensorflow日志)-这对我来说是不可接受的。

在估算师之前,我会做:

    def input_fn():
        dataset.batch(16)
    for epoch in range(epochs):
        estimator_model.train(input_fn, steps)

现在,这样的代码深深地存在于Estimator和Dataset的内胆之中,我无法控制它-因此,我很难做诸如降低学习速度之类的事情。(首先/最后{{1}做点事情}时代。

1 个答案:

答案 0 :(得分:0)

如果您知道火车的大小,则可以设置参数std::future。然后在您的steps_per_epoch = train_size//batch_size中查询model_fn张量,然后获取作为张量global_step = tf.train.get_global_step()传递的历元数。

对于您提到的像学习率表这样的许多应用程序,仅使用基于类似概念的tf.train.piecewise_constant_decay通常更为惯用。