如何在 tensorflow 2x 中使用 Adam().minimize?

How to use Adam().minimize in tensorflow 2x?

首先我禁用急切执行 然后,我计算损失函数如下:

def loss_fn(x, y):
    y_ = model(x, training=True)
    loss = tf.reduce_mean(tf.square(y_ - y))
    return loss

我的优化器是:

opt = Adam(1e-3)

现在,我想把上面的损失降到最低。我写了下面的代码:

def train(x, y):
    loss = loss_fn(x, y)
    opt.minimize(loss, var_list=model.trainable_variables)

但出现以下错误:

 TypeError: 'Tensor' object is not callable

我决定尝试以下方法:

def train(x, y):
    loss = loss_fn(x, y)
    opt.minimize(lambda: loss, var_list=model.trainable_variables)

但我也有以下错误:

ValueError: No gradients provided for any variable: ['dense/kernel:0', 'dense/bias:0', ...]

我找了一些 link 但我没有得到我想要的。 link 示例:Tensorflow 2: How can I use AdamOptimizer.minimize() for updating weights

有人帮我吗?

minimize 函数需要一个损失函数作为参数,以便使用其中的梯度带计算梯度。所以你可以这样写train函数,

def train(x, y):
    opt.minimize(lambda : loss_fn(x, y), var_list=model.trainable_variables)