问题描述
有没有办法获得优化器在更新步骤(在 opt.minimize(loss,[vars])
或 opt.apply_gradients(zip(grads,[vars]))
中)添加到当前变量值的常量?
换句话说,如果我们将优化步骤写为 $\theta_{t+1}=\theta_t+U_{t+1}$,其中 $U_{t+1}$ 是优化器的函数,有没有办法获取$U_{t+1}$的值?
一个hacky的解决方案是制作一个变量的副本,对原始变量执行更新,然后从更新的原始变量中减去副本,即:
with tf.GradientTape() as tape:
opt = tf.keras.optimizers.Adam()
x = tf.Variable([[1.,2.],[3.,4.]])
x_copy = tf.identity(x)
f = lambda: x**2.-4.
opt.minimize(f,[x])
update_increment = x-x_copy
print(update_increment.numpy())
有没有更好的办法?谢谢!
仅供参考 - 我隔离“更新增量”的动机是通过避免我猜测的 tf.assign()
隐藏在 opt.minimize(f,[x])
中会杀死梯度流来实现差异化。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)