我是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没有更好的方法来实现这个目标吗?