Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带自定义估计器的控制历元_Python_Tensorflow_Tensorflow Datasets_Tensorflow Estimator - Fatal编程技术网

Python 带自定义估计器的控制历元

Python 带自定义估计器的控制历元,python,tensorflow,tensorflow-datasets,tensorflow-estimator,Python,Tensorflow,Tensorflow Datasets,Tensorflow Estimator,我的输入函数如下所示: def input_fn(): dataset.repeat(epochs).batch(16) estimator_model.train(input_fn, steps) 我如何通知我的模型这是数据集上的第n次重复(历元)?我想实现一些东西,如衰减的学习率,前n个时期没有对抗性损失的训练模型等。我使用tf.data.Dataset和tf.estimator.estimator。 如果我多次调用train方法: def inpu

我的输入函数如下所示:

    def input_fn():
        dataset.repeat(epochs).batch(16)
    estimator_model.train(input_fn, steps)
我如何通知我的模型这是数据集上的第n次重复(历元)?我想实现一些东西,如衰减的学习率,前n个时期没有对抗性损失的训练模型等。我使用tf.data.Dataset和tf.estimator.estimator。 如果我多次调用train方法:

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

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

在评估师之前,我会:

for epoch in range(epochs):
    for iter, data in enumerate(dataset):
        model.train(data, epoch)

现在这样的代码深藏在估计器和数据集的内脏中,我无法控制它——所以我很难做像衰减学习率之类的事情(为第一个/最后一个
n
epoch做点什么)。

如果你知道你的训练集的大小,你可以设置一个参数
steps\u per\u epoch=train\u size//batch\u size
。然后在你的
model\u fn
中查询
global\u step=tf.train.get\u global\u step()
张量,然后获取作为张量传递的历元数
epochs\u passed=tf.cast(global\u step,tf.float32)/steps\u per\u历元


对于许多应用程序,如您提到的学习率计划,通常更习惯于使用基于类似概念的计划。

如果您知道列车组的大小,您可以设置参数
steps\u per\u epoch=train\u size//batch\u size
。然后在你的
model\u fn
中查询
global\u step=tf.train.get\u global\u step()
张量,然后获取作为张量传递的历元数
epochs\u passed=tf.cast(global\u step,tf.float32)/steps\u per\u历元


对于许多应用程序,如您提到的学习率计划,通常更习惯于使用基于类似概念的学习率计划。

我不想遵循每个历元计算步骤的方法,因为我需要编写单独的代码来处理所有增量等。
分段常数衰减
似乎合理,但是也有同样的问题,另外很多论文都是根据时代来定义参数的。你说“我需要编写单独的代码来处理所有的扩充”是什么意思?您可以以python
float
的形式计算
steps\u/u epoch
,只需在
Estimator
调用中通过
params
传入即可。此处编写的任何张量都可以在您的
模型中全局获得。你需要什么额外的功能?如果我用水平翻转来扩充我的数据集,我的数据集会突然增长两倍,所以我需要编写代码来检查是否应用了扩充并计算数据集大小。等等这是我想避免的不必要的样板文件。如果您愿意在
功能
标签
中添加历元计数器,您可以从
输入
中执行,但代码非常粗糙。计算每个历元的步数不是我想遵循的方法,因为我需要编写单独的代码来处理所有的增广等。
分段常数衰变
似乎是合理的,但也有同样的问题,另外许多论文根据历元定义参数。你说的是什么“我需要编写单独的代码来处理所有增强"? 您可以以python
float
的形式计算
steps\u/u epoch
,只需在
Estimator
调用中通过
params
传入即可。此处编写的任何张量都可以在您的
模型中全局获得。你需要什么额外的功能?如果我用水平翻转来扩充我的数据集,我的数据集会突然增长两倍,所以我需要编写代码来检查是否应用了扩充并计算数据集大小。等等这是我想避免的不必要的样板文件。如果您愿意在
功能
标签
中添加历元计数器,您可以从
输入
中执行,但代码非常粗糙。