Tensorflow如何知道哪些可训练变量需要最小化?

时间:2018-05-25 13:41:49

标签: tensorflow

我试图单独理解start x: 2.5 log(x)^2: 0.83958876 step 0 x: 2.1334836 log(x)^2: 0.57419443 step 1 x: 1.7783105 log(x)^2: 0.33138883 step 2 x: 1.4545966 log(x)^2: 0.14042155 step 3 x: 1.1969798 log(x)^2: 0.032328587 step 4 x: 1.0467671 log(x)^2: 0.002089082 step 5 x: 1.0031027 log(x)^2: 9.596717e-06 step 6 x: 1.0000144 log(x)^2: 2.0805813e-10 step 7 x: 1.0 log(x)^2: 0.0 step 8 x: 1.0 log(x)^2: 0.0 step 9 x: 1.0 log(x)^2: 0.0 API并创建了一个最小的例子来弄清楚发生了什么:

var_list

哪些输出......

apply_gradients()

最小化方法在API文档中描述为:

  

通过更新compute_gradients()添加操作以最大限度地减少损失。

     

此方法只是组合调用compute_gradients()和   apply_gradients()。如果要在应用之前处理渐变   他们明确地调用loss: A Tensor containing the value to minimize. global_step: Optional Variable to increment by one after the variables have been updated. var_list: Optional list or tuple of Variable objects to update to minimize loss. Defaults to the list of variables collected in the graph under the key GraphKeys.TRAINABLE_VARIABLES. for v in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES): print(v)   使用此功能。

     

参数数量:

<tf.Variable 'x:0' shape=() dtype=float32_ref>

如果我添加一些代码来输出TRAINABLE_VARIABLES:

minimize()

我明白了:

{{1}}

如果我在代码中添加另一个变量,它也会作为可训练变量输出,但我的{{1}}方法似乎只使用了x变量。我在another question看到有可能通过&#39; trainable = false&#39;变量声明,但似乎并不需要。

Tensorflow是否检查最小化操作以确定哪些可训练变量是函数的一部分,然后只更新这些变量?

1 个答案:

答案 0 :(得分:1)

  

Tensorflow是否检查最小化操作以确定哪些可训练变量是函数的一部分,然后只更新这些变量?

简而言之,是的。当您执行session.run(train)时,这会调用optimizer.minimize上的log_x_squared功能。如果您要定义另一个没有引用图表其余部分的变量,则不会合并它,因为它没有在任何其他部分引用。

diagram of graph visibility when session.run(train) is executed