为了账号安全,请及时绑定邮箱和手机立即绑定

可视化双头模型中的自定义损失

可视化双头模型中的自定义损失

暮色呼如 2022-10-25 15:23:16
使用本文中的 A2C 代理,如何获取 的数值value_loss,policy_loss以及entropy_loss何时更新权重?我使用的模型是双头的,两个头共用一个树干。策略头输出形状为[number of actions, batch size],值头形状为[1, batch_size]。当这些损失函数作为指标给出时,编译此模型会返回大小不兼容错误:self.model.compile(optimizer=self.optimizer,                     metrics=[self._logits_loss, self._value_loss],                     loss=[self._logits_loss, self._value_loss])两者self._value_loss和self._policy_loss都作为图执行,这意味着其中的所有变量都只是指向图节点的指针。我发现了一些示例,其中评估了张量对象(使用 eval())以从节点中获取值。我不理解它们,因为为了 eval() 一个 Tensor 对象,你需要给它一个 Session 但在 TensorFlow 2.x 中不推荐使用 Sessions。另一个线索是,当train_on_batch()从Keras 中的模型 API调用来训练模型时,该方法会返回损失。我不明白为什么,但它返回的唯一损失来自保单负责人。该头部的损失计算为,policy_loss - entropy_loss但我的目标是分别获得所有三个损失以在图表中可视化它们。欢迎任何帮助,我被卡住了。
查看完整描述

1 回答

?
达令说

TA贡献1821条经验 获得超6个赞

我找到了我的问题的答案。在 Keras 中,metrics内置功能为测量模型的性能和损失提供了一个接口,无论是自定义的还是标准的。

编译模型时如下:

self.model.compile(optimizer=ko.RMSprop(lr=lr),
                   metrics=dict(output_1=self._entropy_loss),
                   loss=dict(output_1=self._logits_loss, output_2=self._value_loss))

...self.model.train_on_batch([...])返回一个列表[total_loss, logits_loss, value_loss, entropy_loss]。通过logits_loss + entropy_loss对值policy_loss进行计算可以计算出来。请注意,此解决方案会导致调用self._entropy_loss()两次。


查看完整回答
反对 回复 2022-10-25
  • 1 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信