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