Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
使用TensorFlow估计器API仅优化模型的某些变量_Tensorflow_Machine Learning_Tensorflow Estimator - Fatal编程技术网

使用TensorFlow估计器API仅优化模型的某些变量

使用TensorFlow估计器API仅优化模型的某些变量,tensorflow,machine-learning,tensorflow-estimator,Tensorflow,Machine Learning,Tensorflow Estimator,我需要冻结部分模型,只训练某些变量。现在,使用低级API,我可以将var_list传递给tf.train.Optimizer.minimize方法。但是,当我使用TensorFlow估计器时,我只能传递优化器本身,优化器用于最小化估计器内环中的损失 我想到的唯一解决方案是定义一个自定义优化器并覆盖优化器.minimize方法。大概是这样的: def最小化(self,*args,**kwargs): 打印(“内部…”) 如果不是kwargs['var_list']: kwargs['var_lis

我需要冻结部分模型,只训练某些变量。现在,使用低级API,我可以将
var_list
传递给
tf.train.Optimizer.minimize
方法。但是,当我使用TensorFlow估计器时,我只能传递优化器本身,优化器用于最小化估计器内环中的损失

我想到的唯一解决方案是定义一个自定义优化器并覆盖
优化器.minimize
方法。大概是这样的:

def最小化(self,*args,**kwargs):
打印(“内部…”)
如果不是kwargs['var_list']:
kwargs['var_list']=self.var_list
返回超级(MyOptimizer,self)。最小化(*args,**kwargs)
现在,我希望在每一个训练步骤的屏幕上都能看到“Inside…”字样;尤其是当我看到模特训练得很好的时候。这表明我的
minimize
函数被完全忽略了,我似乎不知道为什么


那么,覆盖
最小化
是否正确,或者有更好的方法使用估计器实现这一点吗?

您可以通过指定模型函数来创建自定义估计器

    def model_fn(features, labels, mode):
      logits = model_architecture(features)
      loss = loss_function(logits, labels)
      if mode == tf.estimator.ModeKeys.TRAIN:
        optimizer = optimizer
        train_op = ontimizer.minimize(loss=loss, 
                                      global_step=global_step,
                                      var_list=variables_to_minimize)

      return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op)