我对tensorflow相当陌生,我正在努力实现一个我想测试的新优化器。我认为我面临的大多数问题都与对张量流和张量处理方式的了解不足有关。
这是我需要做的:我的优化器具有一些应在运行时更新的参数。应该更新参数的方式是通过计算优化器变量的所有组件的总和。如果我正确理解,应该在_create_slots(self, var_list)
方法内使用“ slot_variables”来定义优化器的变量。就像这样:
for v in var_list:
self._zeros_slot(v, "p_t", self._name)
然后应根据总和更新的参数应声明为非插槽变量:
first_var = min(var_list, key=lambda x: x.name)
self._create_non_slot_variable(initial_value=0., name="p", colocate_with=first_var)
首先,我上面写的是正确的吗?
如果是这样,我尝试用_finish(self, update_ops, name_scope)
方法更新参数:
list_vars = tf.trainable_variables()
p.assign(0) # This is the sum of the variable i want to compute
for var in list_vars:
p_t = self.get_slot(var, "p_t")
p.assign_add(tf.reduce_sum(p_t))
with ops.colocate_with(p):
# negative_moment and positive_moment are two methods if call depending on the result of the sum of the variables.
out = tf.cond(tf.less(p, 0), negative_moment, possitive_moment)
我要使用的策略正确吗?
仅供参考,当我尝试使用优化器最小化Rosenbrock函数时,它可以正常工作,但是当我尝试在MNIST上使用时,它不起作用。我怀疑我的实现过程中存在概念上的问题,但我不知道问题可能在哪里。
在此先感谢大家的帮助。
干杯
丹尼尔