Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要知道变量在Tensorflow中的更新时间和次数_Python_Tensorflow - Fatal编程技术网

Python 需要知道变量在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

在我的Tensorflow项目中,我需要知道下面定义的
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
    AssignAddVariableOp
    等。为此,您可以循环图形操作并匹配其类型和输入。(上面的推理基本上是说,只要使用通常的TensorFlow习惯用法,就只有一个这样的操作)
  • 为计数器
    c
    创建一个变量
  • 对于您在上面找到的每个变异操作,创建一个
    assign\u add(c,1)
    操作,并将它的控制依赖项添加到变异操作中。这样,在执行变异之前,TensorFlow将执行
    assign\u add
    ,这将增加您的计数器