我在TensorFlow中为TD(Lambda)编写了一个自定义训练循环,我希望创建一个日志,用于存储在每个epoch期间计算的一些变量。
在numpy中,我会在每个epoch结束时写类似于list.append(variable_that_I_want_to_save)的代码
但在tf急切执行模式下这是不可行的。
如何保存tf.function中tf.Variable在迭代过程中取的值呢?
非常感谢您提前付出的努力来回复这个问题 – 我认为这应该是一个相当简单的事情。
附注:我应该补充一点,训练是在一个类中进行的,所以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
由于保密协议,我无法分享更多具体信息,但我希望记录的是x取的值
回答:
像这样的解决方案对您有用吗?我在类中添加了一个属性来存储日志。
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_variabletrainer = Trainer(model)trainer.train(xs, ys, lambda)log = trainer.log_variable()