如何使用 TensorFlow 创建循环变量
How to create a recurrent variable with TensorFlow
这听起来超级简单,但我在互联网上找不到任何信息。我可能缺乏一些基本的了解。
我想做一些简单的事情:循环变量。说:
Z(t) = W * Z(t-1)
有一些固定的(但可训练的)W
。
我试过类似的东西:
initializer = tf.random_uniform_initializer(0., 1.)
with tf.variable_scope('recurrent', initializer=initializer):
Z = tf.get_variable('Z', shape=[...])
Z = tf.matmul(W, Z)
当然,在一个会话中,如果我执行 Z.eval()
,它会给出 Z
的连贯值,但 Z
本身不会更新。
因此我的问题是:如何创建一个循环变量,当 运行 使用 TensorFlow 的图形时得到更新?
非常感谢您的帮助!
当你写这样的语句时
Z = tf.matmul(W, Z)
您正在更新 python 变量 Z
而不是与 TensorFlow 变量 Z
关联的 TensorFlow 内部存储。请查看有关 TensorFlow 中有状态操作的 section,以了解 TensorFlow 如何管理状态。要回答您的具体问题,您必须使用 tf.assign
操作来更新 TensorFlow 的 Z
变量,如下所示:
Z = tf.assign(Z, tf.matmul(W, Z))
这听起来超级简单,但我在互联网上找不到任何信息。我可能缺乏一些基本的了解。
我想做一些简单的事情:循环变量。说:
Z(t) = W * Z(t-1)
有一些固定的(但可训练的)W
。
我试过类似的东西:
initializer = tf.random_uniform_initializer(0., 1.)
with tf.variable_scope('recurrent', initializer=initializer):
Z = tf.get_variable('Z', shape=[...])
Z = tf.matmul(W, Z)
当然,在一个会话中,如果我执行 Z.eval()
,它会给出 Z
的连贯值,但 Z
本身不会更新。
因此我的问题是:如何创建一个循环变量,当 运行 使用 TensorFlow 的图形时得到更新?
非常感谢您的帮助!
当你写这样的语句时
Z = tf.matmul(W, Z)
您正在更新 python 变量 Z
而不是与 TensorFlow 变量 Z
关联的 TensorFlow 内部存储。请查看有关 TensorFlow 中有状态操作的 section,以了解 TensorFlow 如何管理状态。要回答您的具体问题,您必须使用 tf.assign
操作来更新 TensorFlow 的 Z
变量,如下所示:
Z = tf.assign(Z, tf.matmul(W, Z))