我想对我的模型应用自定义渐变。
下面,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”
答案 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)