我的意思是,我知道他需要一个ID来跟踪他所需要的,比如那个变量的最后一个梯度,等等,但是我们就不能有一个针对特定Tensor的优化器吗?
a = tf.convert_to_tensor([1.])
with tf.GradientTape() as tape:
tape.watch(a)
loss = a**2
grad = tape.gradient(loss, a)
print(grad)
# <tf.Tensor: shape=(1,), dtype=float32, numpy=array([2.], dtype=float32)>
因此我们可以计算Tensor的梯度,但是对于这个梯度我们什么也做不了,因为它不是Variable
,因此我们不能只做下面的事情:
K.optimizers.Adam().apply_gradients(zip(grad, a))
因为我们将得到:
属性错误:对象没有属性'_unique_id'
但是我们可以,我的意思是,优化器就像w = w - stepsize * grad
,我们有w
,我们有grad
,为什么我们不能在优化器里做这些呢?我可以做些什么,把亚当论文里的公式应用到w
上,而不把它变成tf.Variable
吗?
1条答案
按热度按时间mitkmikd1#
我们可以计算Tensor
a
的梯度,但是对于这个梯度我们什么也做不了,因为它不是一个可训练的变量。梯度带自动检索与损失相关的 * 可训练变量 * 的梯度。
通过更新那些可训练变量的值来运行梯度下降的一个步骤,以最小化损失。