Tensorflow:更新内部变量的好方法吗?

时间:2017-08-08 09:40:14

标签: tensorflow

我是Tensorflow的新手,请原谅我,如果我问一个明显的问题。

我有一个"功能"内部状态,我称之为" pd_encode"。它实现y[t]=kp*x[t]+kd*(x[t]-x[t-1]),其中y[t]=pd_encode(x[t])。我把它定义如下:

def pd_encode(x, kp, kd):
    x_last = tf.Variable(initial_value=np.zeros(x.shape), dtype=x.dtype)
    x_enc = kp*x + kd*(x-x_last)
    with tf.control_dependencies([x_enc]):
        update_op = tf.assign(x_last, x)
    return x_enc, update_op

现在,这可以按预期工作,但是必须将更新操作一直传递到我调用run的位置,这有点烦人。它强制外部函数传递pd_encode的内部状态变量,这似乎不正确。我发现通过将定义更改为:

,我可以隐式更新
def pd_encode(x, kp, kd):
    x_last = tf.Variable(initial_value=np.zeros(x.shape), dtype=x.dtype)
    x_enc = kp*x + kd*(x-x_last)
    with tf.control_dependencies([x_enc]):
        update_op = tf.assign(x_last, x)
    with tf.control_dependencies([update_op]):
        x_enc = tf.identity(x_enc)
    return x_enc

现在,这就是我想要的,但在这里使用身份功能似乎是一个可怕的黑客。 tensorflow没有更好的方法来实现这个目标吗?

0 个答案:

没有答案