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

时间:2019-10-23 12:37:17

标签: python python-3.x tensorflow tensorflow2.0

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

下面,actor_t是我的模型。 get_weights()返回一个np.array列表,并在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”对象没有属性“ _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:“张量”对象没有属性“ _in_graph_mode”

1 个答案:

答案 0 :(得分:1)

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)