【问题标题】:Keras GradientType: Calculating gradients with respect to the output nodeKeras GradientType:计算相对于输出节点的梯度
【发布时间】:2022-01-18 13:47:19
【问题描述】:

首先:此问题不寻求有关强化学习 (RL) 的帮助,RL 仅用作示例。

Keras 文档包含一个使用 Gradient Tape 的示例 actor-critic reinforcement learning implementation。基本上,他们创建了一个具有两个独立输出的模型:一个用于演员(n 动作),另一个用于评论家(1 奖励)。以下几行描述了反向传播过程(在代码示例中的某处找到):

# Backpropagation
loss_value = sum(actor_losses) + sum(critic_losses)
grads = tape.gradient(loss_value, model.trainable_variables)
optimizer.apply_gradients(zip(grads, model.trainable_variables))

尽管actor和critic loss的计算方式不同,但它们将这两个loss相加得到用于计算梯度的最终loss值。

在看这个代码示例时,我想到了一个问题:有没有一种方法可以计算输出层相对于相应损失的梯度,即根据以下公式计算第一个n 输出节点的梯度演员损失和使用批评损失的最后一个输出节点的梯度?据我了解,这比添加损失(不同!)和基于这种累积方法更新梯度要方便得多。你同意吗?

【问题讨论】:

    标签: python tensorflow keras reinforcement-learning gradienttape


    【解决方案1】:

    好吧,经过一番研究,我自己找到了答案:可以根据层名称提取给定层的可训练变量。然后我们可以将tape.gradientoptimizer.apply_gradients 应用于提取的可训练变量集。我目前的解决方案很慢,但它有效。我只需要弄清楚如何改进它的运行时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      相关资源
      最近更新 更多