我试图单独理解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是否检查最小化操作以确定哪些可训练变量是函数的一部分,然后只更新这些变量?
答案 0 :(得分:1)
Tensorflow是否检查最小化操作以确定哪些可训练变量是函数的一部分,然后只更新这些变量?
简而言之,是的。当您执行session.run(train)
时,这会调用optimizer.minimize
上的log_x_squared
功能。如果您要定义另一个没有引用图表其余部分的变量,则不会合并它,因为它没有在任何其他部分引用。
diagram of graph visibility when session.run(train) is executed