Python 需要知道变量在Tensorflow中的更新时间和次数
在我的Tensorflow项目中,我需要知道下面定义的Python 需要知道变量在Tensorflow中的更新时间和次数,python,tensorflow,Python,Tensorflow,在我的Tensorflow项目中,我需要知道下面定义的train_op是否更新了某个变量,如果更新了,会更新多少次 对于前馈网络,这很简单,一个train_op调用会导致变量的一次性更新,但对于递归网络,一个train_op将导致num_steps更新,但由于我在递归层中有自己的变量,我不确定他们是更新了num\u步数次还是只更新了一次 tf.reset_default_graph() tf.InteractiveSession() __N = 10 tf_w0 = tf.get_variabl
train_op
是否更新了某个变量,如果更新了,会更新多少次
对于前馈网络,这很简单,一个train_op
调用会导致变量的一次性更新,但对于递归网络,一个train_op
将导致num_steps
更新,但由于我在递归层中有自己的变量,我不确定他们是更新了num\u步数
次还是只更新了一次
tf.reset_default_graph()
tf.InteractiveSession()
__N = 10
tf_w0 = tf.get_variable(name="w0",\
initializer=tf.constant(value=10.00,shape=[__N]),
dtype=tf.float32,\
trainable=True)
tf_counter = tf.get_variable(name="counter",\
initializer=tf.constant(value=0.0,shape=[]),
dtype=tf.float32,\
trainable=False)
loss = tf.square(tf_w0)
optimizer = tf.train.AdamOptimizer(learning_rate=1e-3)
grads_vars = optimizer.compute_gradients(loss=loss, var_list=tf.trainable_variables())
train_op = optimizer.apply_gradients(grads_vars)
如何将计数器附加到变量,以便每次train\u op
更新时,计数器也应递增?
这样,我就知道Tensorflow的递归层中的变量(我有自己修改过的递归层,代码有点乱)是否得到了应有的更新
提前谢谢。我很确定重复权重只更新一次。重量在向前传球中重复使用多次。在后退过程中计算多个渐变。将这些渐变添加到一起,然后进行单个更新。有一种方法可以实现您想要的功能,但它相当复杂。你似乎有一些不正确的假设。我会尽力澄清一些事情,希望你不会真的需要柜台 通常,变量在每次调用时更新一次。如果您的操作既不在while循环中(很可能不是,这是一个高级概念),也不在while循环中,那么它最多只能执行一次。如果您正在使用自动微分(例如,
优化器.compute_gradients
)而不是自己添加梯度计算操作,则所有梯度将在应用于变量之前进行计算和聚合。应用程序只执行一次,除非您多次调用optimizer.apply_gradients()
apply_gradients
是一个函数,用于创建变异变量的操作
即使是RNN也是如此。在RNN的情况下,梯度计算是在while循环中进行的,但是一旦计算了梯度,它们仍然在循环之外应用一次
如果你真的想添加一个计数器。以下是您可以采取的粗略方法:
- 在图形中查找所有使变量
变异的操作。这些操作包括v
,AssignVariableOp
等。为此,您可以循环图形操作并匹配其类型和输入。(上面的推理基本上是说,只要使用通常的TensorFlow习惯用法,就只有一个这样的操作)AssignAddVariableOp
- 为计数器
创建一个变量c
- 对于您在上面找到的每个变异操作,创建一个
操作,并将它的控制依赖项添加到变异操作中。这样,在执行变异之前,TensorFlow将执行assign\u add(c,1)
,这将增加您的计数器assign\u add