在自定义训练循环中记录tf.variable

时间:2020-06-04 17:59:31

标签: python tensorflow machine-learning logging

我已经在TensorFlow中为TD(Lambda)编写了一个自定义训练循环,我想创建一个日志,其中存储了在每个时期计算的一些变量。

在numpy中,我会写类似 list.append(variable_that_I_want_to_save) 在每个时代结束时

但是在热切的执行中这是不可能的。

如何保存迭代过程中tf.function中的tf.Variable值?

非常感谢您做出的努力-我想这肯定是一件微不足道的事情。

PS: 我应该补充说,训练是在一个类中进行的,所以tf.concat无法解决问题,因为我无法将连接张量重复分配给training_loop类的实例变量...

这是我的工作的伪代码:

class Trainer:
   def __init__(self, model):
      self.model = model

   def train(xs,ys,lambda):
      for x,y in zip(xs,ys):
         learn(x,y,lambda)

   def learn(x,y,lambda):
      err = y - self.model(x)
      model.apply_weights( grad(err) * self.custom_alpha( self.model.weights )

   def custom_optimizer(  weights ):
      x = some operations with weights 
      alpha = some operation with x
      return alpha

由于NDA,我无法分享更具体的信息,但是我要记录的是x所取的值

1 个答案:

答案 0 :(得分:0)

这样的事情对您有用吗? 我已经在该类中添加了一个属性,它将存储日志。

class Trainer:
    def __init__(self, model):
        self.model = model
        self.log_variable = []

    def train(self, xs, ys, lambda):
        for x,y in zip(xs,ys):
            v = learn(x,y,lambda)
            self.log_variable.append(v.numpy())

    @tf.function
    def learn(self, x, y, lambda):
        err = y - self.model(x)
        model.apply_weights( grad(err) * self.custom_alpha( self.model.weights )
        return variable_that_I_want_to_save

    def custom_optimizer( weights ):
        x = some operations with weights 
        alpha = some operation with x
        return alpha

    def get_log(self):
        return self.log_variable

trainer = Trainer(model)
trainer.train(xs, ys, lambda)
log = trainer.log_variable()