Tensorflow 在优化器中获取插槽值的正确方法

Tensorflow 在优化器中获取插槽值的正确方法,tensorflow,Tensorflow,我有一个AdamOptimizer。我想调试我的模型,所以我想得到诊断。我知道opt.get_slot()方法,但不幸的是它总是不返回任何值 我尝试了以下方法: 在我调用opt.minimize(损失)后获取它 多次运行优化步骤 在这两种情况下,我都得不到。我做错了什么?我自己发现了问题。我应该调用opt.get_slot(var,slot),其中var是一个变量,而不是loss函数。因此,我认为,它应该返回所有时刻和速率的向量,但我应该指定要检查的变量。有一种更通用的方法,不特定于插槽,您

我有一个AdamOptimizer。我想调试我的模型,所以我想得到诊断。我知道opt.get_slot()方法,但不幸的是它总是不返回任何值

我尝试了以下方法:

  • 在我调用opt.minimize(损失)后获取它
  • 多次运行优化步骤

在这两种情况下,我都得不到。我做错了什么?

我自己发现了问题。我应该调用opt.get_slot(var,slot),其中var是一个变量,而不是loss函数。因此,我认为,它应该返回所有时刻和速率的向量,但我应该指定要检查的变量。

有一种更通用的方法,不特定于插槽,您可以
最小化
应用梯度
调用内部
捕获变量
装饰器,然后根据变量的
变量筛选出所需的变量。name

@contextlib.contextmanager
def capture_vars():
  """Decorator to capture global variables created in the block.
  """

  micros = int(time.perf_counter()*10**6)
  scope_name = "capture_vars_"+str(micros)
  op_list = []
  with tf.variable_scope(scope_name):
    yield op_list

  g = tf.get_default_graph()
  for v in tf.global_variables():
    scope = v.name.split('/', 1)[0]
    if scope == scope_name:
      op_list.append(v)

with u.capture_vars() as adam_vars:
  train_op = opt.apply_gradients(grad_new.to_grads_and_vars())
sess.run([v.initializer for v in adam_vars])