Tensorflow:使用自定义变量列表初始化优化器时出错

Tensorflow:使用自定义变量列表初始化优化器时出错,tensorflow,Tensorflow,我试图只优化变量的一个子集,如下所示: my_train = tf.train.RMSPropOptimizer(0.001).minimize(my_loss, var_list=my_variables) 这给了我一个错误消息 ValueError: No gradients provided for any variable: ((None, <tensorflow.python.ops.variables.Variable object at 0x7f30317a5f10>

我试图只优化变量的一个子集,如下所示:

my_train = tf.train.RMSPropOptimizer(0.001).minimize(my_loss, var_list=my_variables)
这给了我一个错误消息

ValueError: No gradients provided for any variable: ((None, <tensorflow.python.ops.variables.Variable object at 0x7f30317a5f10>), (None, <tensorflow.python.ops.variables.Variable object at 0x7f303146fa10>), (None, <tensorflow.python.ops.variables.Variable object at 0x7f3031522390>), (None, <tensorflow.python.ops.variables.Variable object at 0x7f30314e1dd0>), (None, <tensorflow.python.ops.variables.Variable object at 0x7f30314a5fd0>), (None, <tensorflow.python.ops.variables.Variable object at 0x7f303146ae90>))
ValueError:没有为任何变量提供渐变:((无,),(无,),(无,),(无,),(无,),(无,),(无,))

如果我省略var_列表,就不会有错误,但这显然不是我想要的,从错误消息中我不清楚问题是什么。

这里的问题是TensorFlow无法找到从
my_loss
my_variables
中任何变量的反向传播路径。你确定我的损失取决于这些变量吗?也许分享一个完整的例子会让问题变得更清楚。我的例子相当复杂,所以我不太愿意把它全部贴在这里。然而,tensorboard显示了一条标记为“六个张量”(即my_范围内的变量数量)的边,该边从my_范围进入my_损失。如果展开变量和
my_损失
之间的路径,您会看到什么操作?我的猜测是,有一些不可微的东西(例如a
tf.cast()
)阻止了梯度反向传播。这是我第一次使用tensorboard,所以我不确定如何扩展路径。点击它似乎没有任何作用。在任何情况下,唯一的图层应该是matmul、addition、sigmoid、tanh和concat。在发现您扩展了名称范围而不是边之后,我找到了它的底部。事实上,由于代码中的错误,我的_变量和我的_丢失之间没有联系。我发现在任何地方添加名称作用域都有很大帮助,并允许我找到bug。好奇的是:一个helper函数使用全局变量而不是它自己的参数(我最初没有捕捉到,因为我将这些全局变量作为参数传递),因此我的图形连接错误。