对TFTensor使用Keras优化器

qjp7pelc  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(138)

我的意思是,我知道他需要一个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吗?

mitkmikd

mitkmikd1#

我们可以计算Tensora的梯度,但是对于这个梯度我们什么也做不了,因为它不是一个可训练的变量。
梯度带自动检索与损失相关的 * 可训练变量 * 的梯度。

grads = tape.gradient(loss_value, model.trainable_weights)

通过更新那些可训练变量的值来运行梯度下降的一个步骤,以最小化损失。

optimizer.apply_gradients(zip(grads, model.trainable_weights))

相关问题