我需要冻结我的模型的一部分,培养只有某些变量。现在,随着低级别的API,我可以通过var_list
到tf.train.Optimizer.minimize
方法。但是,当我使用TensorFlow估计,我只能通过优化本身,然后将其用于最小化估算内环内的损耗。
这使我想到的唯一的解决办法是定义一个定制的优化和覆盖Optimizer.minimize
方法。事情是这样的:
def minimize(self, *args, **kwargs):
print("Inside...")
if not kwargs['var_list']:
kwargs['var_list'] = self.var_list
return super(MyOptimizer, self).minimize(*args, **kwargs)
现在,我希望看到“里面......”这句话是在屏幕的每个训练阶段上印刷;尤其是当我看到该模型被训练就好了。这有点让我发现,我的minimize
功能被完全忽略,我似乎无法找出原因。
那么,是不是正确的,甚至重写minimize
或有与估计这样做的更好的办法?
你可以简单地通过指定model_fn功能进行自定义估计
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)