使用 get_weights() 应用渐变时出错

Error when applying gradients with get_weights()

我想对我的模型应用自定义渐变。

下面,actor_t是我的模型。 get_weights() returns np.arrays 的列表并查看 tensorflow 的文档和代码,apply_gradients 需要它是张量列表。

def update_from_gradients(self, actor_gradients):
        grads_and_vars = list(zip(actor_gradients, self.actor_t.get_weights()))
        train_op = self.actor_opt.apply_gradients(grads_and_vars)  # error here

AttributeError: 'numpy.ndarray' object has no attribute '_in_graph_mode'

我也试过这个:

weights = [tf.compat.v2.convert_to_tensor(w) for w in self.actor_t.get_weights()]
grads_and_vars = list(zip(actor_gradients, weights))
train_op = self.actor_opt.apply_gradients(grads_and_vars)

引发了同样的错误:

AttributeError: 'Tensor' object has no attribute '_in_graph_mode'

get_weights 将为您提供模型中权重的当前值,作为 NumPy 数组。您需要的是模型的可训练变量,您可以使用 属性 trainable_weights 或其别名 trainable_variables.

获得
def update_from_gradients(self, actor_gradients):
        grads_and_vars = list(zip(actor_gradients, self.actor_t.trainable_weights))
        train_op = self.actor_opt.apply_gradients(grads_and_vars)